beeai-framework 0.1.21 → 0.1.23
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/dist/adapters/a2a/agents/agent.d.cts +6 -10
- package/dist/adapters/a2a/agents/agent.d.ts +6 -10
- package/dist/adapters/a2a/agents/events.d.cts +1 -1
- package/dist/adapters/a2a/agents/events.d.ts +1 -1
- package/dist/adapters/a2a/agents/types.d.cts +2 -2
- package/dist/adapters/a2a/agents/types.d.ts +2 -2
- package/dist/adapters/a2a/serve/agent_executor.d.cts +3 -3
- package/dist/adapters/a2a/serve/agent_executor.d.ts +3 -3
- package/dist/adapters/a2a/serve/server.d.cts +2 -2
- package/dist/adapters/a2a/serve/server.d.ts +2 -2
- package/dist/adapters/acp/agents/agent.d.cts +6 -10
- package/dist/adapters/acp/agents/agent.d.ts +6 -10
- package/dist/adapters/acp/agents/events.d.cts +1 -1
- package/dist/adapters/acp/agents/events.d.ts +1 -1
- package/dist/adapters/agentstack/agents/agent.d.cts +8 -6
- package/dist/adapters/agentstack/agents/agent.d.ts +8 -6
- package/dist/adapters/agentstack/agents/events.d.cts +1 -1
- package/dist/adapters/agentstack/agents/events.d.ts +1 -1
- package/dist/adapters/amazon-bedrock/backend/chat.d.cts +2 -2
- package/dist/adapters/amazon-bedrock/backend/chat.d.ts +2 -2
- package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +2 -2
- package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +2 -2
- package/dist/adapters/anthropic/backend/chat.d.cts +2 -2
- package/dist/adapters/anthropic/backend/chat.d.ts +2 -2
- package/dist/adapters/anthropic/backend/embedding.d.cts +2 -2
- package/dist/adapters/anthropic/backend/embedding.d.ts +2 -2
- package/dist/adapters/azure-openai/backend/chat.d.cts +2 -2
- package/dist/adapters/azure-openai/backend/chat.d.ts +2 -2
- package/dist/adapters/azure-openai/backend/embedding.d.cts +2 -2
- package/dist/adapters/azure-openai/backend/embedding.d.ts +2 -2
- package/dist/adapters/dummy/backend/chat.d.cts +2 -2
- package/dist/adapters/dummy/backend/chat.d.ts +2 -2
- package/dist/adapters/dummy/backend/embedding.d.cts +2 -2
- package/dist/adapters/dummy/backend/embedding.d.ts +2 -2
- package/dist/adapters/google-vertex/backend/chat.d.cts +2 -2
- package/dist/adapters/google-vertex/backend/chat.d.ts +2 -2
- package/dist/adapters/google-vertex/backend/embedding.d.cts +2 -2
- package/dist/adapters/google-vertex/backend/embedding.d.ts +2 -2
- package/dist/adapters/groq/backend/chat.d.cts +2 -2
- package/dist/adapters/groq/backend/chat.d.ts +2 -2
- package/dist/adapters/groq/backend/embedding.d.cts +2 -2
- package/dist/adapters/groq/backend/embedding.d.ts +2 -2
- package/dist/adapters/langchain/backend/chat.d.cts +2 -2
- package/dist/adapters/langchain/backend/chat.d.ts +2 -2
- package/dist/adapters/langchain/backend/embedding.d.cts +2 -2
- package/dist/adapters/langchain/backend/embedding.d.ts +2 -2
- package/dist/adapters/langchain/tools.d.cts +1 -1
- package/dist/adapters/langchain/tools.d.ts +1 -1
- package/dist/adapters/ollama/backend/chat.cjs +1 -2
- package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
- package/dist/adapters/ollama/backend/chat.d.cts +2 -3
- package/dist/adapters/ollama/backend/chat.d.ts +2 -3
- package/dist/adapters/ollama/backend/chat.js +1 -2
- package/dist/adapters/ollama/backend/chat.js.map +1 -1
- package/dist/adapters/ollama/backend/embedding.d.cts +2 -2
- package/dist/adapters/ollama/backend/embedding.d.ts +2 -2
- package/dist/adapters/openai/backend/chat.d.cts +2 -2
- package/dist/adapters/openai/backend/chat.d.ts +2 -2
- package/dist/adapters/openai/backend/embedding.d.cts +2 -2
- package/dist/adapters/openai/backend/embedding.d.ts +2 -2
- package/dist/adapters/vercel/backend/chat.cjs +77 -17
- package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
- package/dist/adapters/vercel/backend/chat.d.cts +2 -2
- package/dist/adapters/vercel/backend/chat.d.ts +2 -2
- package/dist/adapters/vercel/backend/chat.js +77 -17
- package/dist/adapters/vercel/backend/chat.js.map +1 -1
- package/dist/adapters/vercel/backend/embedding.d.cts +2 -2
- package/dist/adapters/vercel/backend/embedding.d.ts +2 -2
- package/dist/adapters/vercel/backend/utils.cjs +32 -0
- package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
- package/dist/adapters/vercel/backend/utils.d.cts +6 -4
- package/dist/adapters/vercel/backend/utils.d.ts +6 -4
- package/dist/adapters/vercel/backend/utils.js +31 -1
- package/dist/adapters/vercel/backend/utils.js.map +1 -1
- package/dist/adapters/watsonx/backend/chat.cjs +7 -8
- package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
- package/dist/adapters/watsonx/backend/chat.d.cts +4 -4
- package/dist/adapters/watsonx/backend/chat.d.ts +4 -4
- package/dist/adapters/watsonx/backend/chat.js +7 -8
- package/dist/adapters/watsonx/backend/chat.js.map +1 -1
- package/dist/adapters/watsonx/backend/embedding.d.cts +2 -2
- package/dist/adapters/watsonx/backend/embedding.d.ts +2 -2
- package/dist/adapters/xai/backend/chat.d.cts +2 -2
- package/dist/adapters/xai/backend/chat.d.ts +2 -2
- package/dist/{agent-DvvVGvLr.d.cts → agent-BVuc9Nfn.d.cts} +5 -4
- package/dist/{agent-CHebzsQB.d.ts → agent-Cuy8Q4gw.d.ts} +5 -4
- package/dist/agents/base.cjs +5 -2
- package/dist/agents/base.cjs.map +1 -1
- package/dist/agents/base.d.cts +2 -2
- package/dist/agents/base.d.ts +2 -2
- package/dist/agents/base.js +5 -2
- package/dist/agents/base.js.map +1 -1
- package/dist/agents/experimental/replan/agent.d.cts +3 -3
- package/dist/agents/experimental/replan/agent.d.ts +3 -3
- package/dist/agents/experimental/replan/prompts.d.cts +1 -1
- package/dist/agents/experimental/replan/prompts.d.ts +1 -1
- package/dist/agents/experimental/streamlit/agent.d.cts +8 -12
- package/dist/agents/experimental/streamlit/agent.d.ts +8 -12
- package/dist/agents/react/agent.d.cts +4 -4
- package/dist/agents/react/agent.d.ts +4 -4
- package/dist/agents/react/runners/base.d.cts +4 -4
- package/dist/agents/react/runners/base.d.ts +4 -4
- package/dist/agents/react/runners/deep-think/runner.d.cts +4 -4
- package/dist/agents/react/runners/deep-think/runner.d.ts +4 -4
- package/dist/agents/react/runners/default/runner.d.cts +5 -5
- package/dist/agents/react/runners/default/runner.d.ts +5 -5
- package/dist/agents/react/runners/granite/runner.d.cts +4 -4
- package/dist/agents/react/runners/granite/runner.d.ts +4 -4
- package/dist/agents/react/types.d.cts +2 -2
- package/dist/agents/react/types.d.ts +2 -2
- package/dist/agents/requirement/agent.cjs +162 -0
- package/dist/agents/requirement/agent.cjs.map +1 -0
- package/dist/agents/requirement/agent.d.cts +29 -0
- package/dist/agents/requirement/agent.d.ts +29 -0
- package/dist/agents/requirement/agent.js +160 -0
- package/dist/agents/requirement/agent.js.map +1 -0
- package/dist/agents/requirement/prompts.cjs +95 -0
- package/dist/agents/requirement/prompts.cjs.map +1 -0
- package/dist/agents/requirement/prompts.d.cts +107 -0
- package/dist/agents/requirement/prompts.d.ts +107 -0
- package/dist/agents/requirement/prompts.js +90 -0
- package/dist/agents/requirement/prompts.js.map +1 -0
- package/dist/agents/requirement/requirements/conditional.cjs +190 -0
- package/dist/agents/requirement/requirements/conditional.cjs.map +1 -0
- package/dist/agents/requirement/requirements/conditional.d.cts +71 -0
- package/dist/agents/requirement/requirements/conditional.d.ts +71 -0
- package/dist/agents/requirement/requirements/conditional.js +188 -0
- package/dist/agents/requirement/requirements/conditional.js.map +1 -0
- package/dist/agents/requirement/requirements/requirement.cjs +107 -0
- package/dist/agents/requirement/requirements/requirement.cjs.map +1 -0
- package/dist/agents/requirement/requirements/requirement.d.cts +59 -0
- package/dist/agents/requirement/requirements/requirement.d.ts +59 -0
- package/dist/agents/requirement/requirements/requirement.js +104 -0
- package/dist/agents/requirement/requirements/requirement.js.map +1 -0
- package/dist/agents/requirement/requirements/utils.cjs +74 -0
- package/dist/agents/requirement/requirements/utils.cjs.map +1 -0
- package/dist/agents/requirement/requirements/utils.d.cts +40 -0
- package/dist/agents/requirement/requirements/utils.d.ts +40 -0
- package/dist/agents/requirement/requirements/utils.js +69 -0
- package/dist/agents/requirement/requirements/utils.js.map +1 -0
- package/dist/agents/requirement/runner.cjs +268 -0
- package/dist/agents/requirement/runner.cjs.map +1 -0
- package/dist/agents/requirement/runner.d.cts +115 -0
- package/dist/agents/requirement/runner.d.ts +115 -0
- package/dist/agents/requirement/runner.js +266 -0
- package/dist/agents/requirement/runner.js.map +1 -0
- package/dist/agents/requirement/types.cjs +40 -0
- package/dist/agents/requirement/types.cjs.map +1 -0
- package/dist/agents/requirement/types.d.cts +24 -0
- package/dist/agents/requirement/types.d.ts +24 -0
- package/dist/agents/requirement/types.js +35 -0
- package/dist/agents/requirement/types.js.map +1 -0
- package/dist/agents/requirement/utils/llm.cjs +202 -0
- package/dist/agents/requirement/utils/llm.cjs.map +1 -0
- package/dist/agents/requirement/utils/llm.d.cts +50 -0
- package/dist/agents/requirement/utils/llm.d.ts +50 -0
- package/dist/agents/requirement/utils/llm.js +199 -0
- package/dist/agents/requirement/utils/llm.js.map +1 -0
- package/dist/agents/requirement/utils/tool.cjs +95 -0
- package/dist/agents/requirement/utils/tool.cjs.map +1 -0
- package/dist/agents/requirement/utils/tool.d.cts +24 -0
- package/dist/agents/requirement/utils/tool.d.ts +24 -0
- package/dist/agents/requirement/utils/tool.js +92 -0
- package/dist/agents/requirement/utils/tool.js.map +1 -0
- package/dist/agents/requirement/utils/toolCallChecker.cjs +61 -0
- package/dist/agents/requirement/utils/toolCallChecker.cjs.map +1 -0
- package/dist/agents/requirement/utils/toolCallChecker.d.cts +28 -0
- package/dist/agents/requirement/utils/toolCallChecker.d.ts +28 -0
- package/dist/agents/requirement/utils/toolCallChecker.js +59 -0
- package/dist/agents/requirement/utils/toolCallChecker.js.map +1 -0
- package/dist/agents/toolCalling/agent.cjs +4 -1
- package/dist/agents/toolCalling/agent.cjs.map +1 -1
- package/dist/agents/toolCalling/agent.d.cts +11 -12
- package/dist/agents/toolCalling/agent.d.ts +11 -12
- package/dist/agents/toolCalling/agent.js +5 -2
- package/dist/agents/toolCalling/agent.js.map +1 -1
- package/dist/agents/toolCalling/types.d.cts +1 -1
- package/dist/agents/toolCalling/types.d.ts +1 -1
- package/dist/agents/types.d.cts +2 -2
- package/dist/agents/types.d.ts +2 -2
- package/dist/backend/backend.d.cts +2 -2
- package/dist/backend/backend.d.ts +2 -2
- package/dist/backend/chat.cjs +122 -4
- package/dist/backend/chat.cjs.map +1 -1
- package/dist/backend/chat.d.cts +3 -3
- package/dist/backend/chat.d.ts +3 -3
- package/dist/backend/chat.js +123 -5
- package/dist/backend/chat.js.map +1 -1
- package/dist/backend/core.d.cts +3 -3
- package/dist/backend/core.d.ts +3 -3
- package/dist/backend/embedding.d.cts +2 -2
- package/dist/backend/embedding.d.ts +2 -2
- package/dist/backend/message.cjs +20 -13
- package/dist/backend/message.cjs.map +1 -1
- package/dist/backend/message.d.cts +7 -3
- package/dist/backend/message.d.ts +7 -3
- package/dist/backend/message.js +20 -13
- package/dist/backend/message.js.map +1 -1
- package/dist/backend/utils.d.cts +2 -2
- package/dist/backend/utils.d.ts +2 -2
- package/dist/{base-BQgDlcGa.d.ts → base-CyFx7BRL.d.ts} +5 -3
- package/dist/{base-CwcxwybB.d.cts → base-XfWeXQ-S.d.cts} +5 -3
- package/dist/{chat-CRb3vUVg.d.cts → chat-BOb9n7AJ.d.cts} +7 -8
- package/dist/{chat-C0s-o6ll.d.ts → chat-DrqwUgD8.d.ts} +7 -8
- package/dist/context.cjs +22 -5
- package/dist/context.cjs.map +1 -1
- package/dist/context.d.cts +19 -6
- package/dist/context.d.ts +19 -6
- package/dist/context.js +23 -7
- package/dist/context.js.map +1 -1
- package/dist/emitter/emitter.cjs +21 -14
- package/dist/emitter/emitter.cjs.map +1 -1
- package/dist/emitter/emitter.d.cts +1 -1
- package/dist/emitter/emitter.d.ts +1 -1
- package/dist/emitter/emitter.js +21 -14
- package/dist/emitter/emitter.js.map +1 -1
- package/dist/emitter/types.d.cts +1 -1
- package/dist/emitter/types.d.ts +1 -1
- package/dist/{emitter-CZFbzlUi.d.ts → emitter-36-9MnvA.d.ts} +4 -3
- package/dist/{emitter-DpqUYjXH.d.cts → emitter-jN55XZZq.d.cts} +4 -3
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/internals/fetcher.d.cts +1 -1
- package/dist/internals/fetcher.d.ts +1 -1
- package/dist/internals/helpers/prototype.cjs +5 -0
- package/dist/internals/helpers/prototype.cjs.map +1 -1
- package/dist/internals/helpers/prototype.d.cts +2 -1
- package/dist/internals/helpers/prototype.d.ts +2 -1
- package/dist/internals/helpers/prototype.js +5 -1
- package/dist/internals/helpers/prototype.js.map +1 -1
- package/dist/internals/types.cjs.map +1 -1
- package/dist/internals/types.d.cts +1 -1
- package/dist/internals/types.d.ts +1 -1
- package/dist/internals/types.js.map +1 -1
- package/dist/memory/summarizeMemory.d.cts +2 -2
- package/dist/memory/summarizeMemory.d.ts +2 -2
- package/dist/middleware/streamToolCall.cjs +132 -0
- package/dist/middleware/streamToolCall.cjs.map +1 -0
- package/dist/middleware/streamToolCall.d.cts +94 -0
- package/dist/middleware/streamToolCall.d.ts +94 -0
- package/dist/middleware/streamToolCall.js +130 -0
- package/dist/middleware/streamToolCall.js.map +1 -0
- package/dist/middleware/trajectory.cjs +331 -0
- package/dist/middleware/trajectory.cjs.map +1 -0
- package/dist/middleware/trajectory.d.cts +115 -0
- package/dist/middleware/trajectory.d.ts +115 -0
- package/dist/middleware/trajectory.js +329 -0
- package/dist/middleware/trajectory.js.map +1 -0
- package/dist/parsers/linePrefix.d.cts +1 -1
- package/dist/parsers/linePrefix.d.ts +1 -1
- package/dist/serializer/serializer.cjs +5 -4
- package/dist/serializer/serializer.cjs.map +1 -1
- package/dist/serializer/serializer.d.cts +1 -1
- package/dist/serializer/serializer.d.ts +1 -1
- package/dist/serializer/serializer.js +5 -4
- package/dist/serializer/serializer.js.map +1 -1
- package/dist/serializer/utils.cjs +3 -0
- package/dist/serializer/utils.cjs.map +1 -1
- package/dist/serializer/utils.d.cts +1 -1
- package/dist/serializer/utils.d.ts +1 -1
- package/dist/serializer/utils.js +3 -0
- package/dist/serializer/utils.js.map +1 -1
- package/dist/{serializer-CQxucveV.d.ts → serializer-53t8gGQa.d.ts} +3 -2
- package/dist/{serializer-BKn50Vnx.d.cts → serializer-c51B2z6d.d.cts} +3 -2
- package/dist/template.cjs +20 -0
- package/dist/template.cjs.map +1 -1
- package/dist/template.d.cts +1 -0
- package/dist/template.d.ts +1 -0
- package/dist/template.js +20 -0
- package/dist/template.js.map +1 -1
- package/dist/tools/arxiv.d.cts +1 -1
- package/dist/tools/arxiv.d.ts +1 -1
- package/dist/tools/base.cjs.map +1 -1
- package/dist/tools/base.d.cts +3 -2
- package/dist/tools/base.d.ts +3 -2
- package/dist/tools/base.js.map +1 -1
- package/dist/tools/calculator.d.cts +1 -1
- package/dist/tools/calculator.d.ts +1 -1
- package/dist/tools/custom.d.cts +2 -2
- package/dist/tools/custom.d.ts +2 -2
- package/dist/tools/database/elasticsearch.d.cts +1 -1
- package/dist/tools/database/elasticsearch.d.ts +1 -1
- package/dist/tools/database/milvus.d.cts +3 -3
- package/dist/tools/database/milvus.d.ts +3 -3
- package/dist/tools/database/qdrant.d.cts +1 -1
- package/dist/tools/database/qdrant.d.ts +1 -1
- package/dist/tools/database/sql.d.cts +1 -1
- package/dist/tools/database/sql.d.ts +1 -1
- package/dist/tools/handoff.cjs +68 -0
- package/dist/tools/handoff.cjs.map +1 -0
- package/dist/tools/handoff.d.cts +47 -0
- package/dist/tools/handoff.d.ts +47 -0
- package/dist/tools/handoff.js +66 -0
- package/dist/tools/handoff.js.map +1 -0
- package/dist/tools/llm.d.cts +2 -2
- package/dist/tools/llm.d.ts +2 -2
- package/dist/tools/mcp.d.cts +1 -1
- package/dist/tools/mcp.d.ts +1 -1
- package/dist/tools/openapi.d.cts +1 -1
- package/dist/tools/openapi.d.ts +1 -1
- package/dist/tools/python/output.d.cts +1 -1
- package/dist/tools/python/output.d.ts +1 -1
- package/dist/tools/python/python.d.cts +2 -2
- package/dist/tools/python/python.d.ts +2 -2
- package/dist/tools/search/base.d.cts +1 -1
- package/dist/tools/search/base.d.ts +1 -1
- package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
- package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
- package/dist/tools/search/googleSearch.d.cts +1 -1
- package/dist/tools/search/googleSearch.d.ts +1 -1
- package/dist/tools/search/searXNGSearch.d.cts +1 -1
- package/dist/tools/search/searXNGSearch.d.ts +1 -1
- package/dist/tools/search/wikipedia.d.cts +1 -1
- package/dist/tools/search/wikipedia.d.ts +1 -1
- package/dist/tools/similarity.d.cts +1 -1
- package/dist/tools/similarity.d.ts +1 -1
- package/dist/tools/think.cjs +52 -0
- package/dist/tools/think.cjs.map +1 -0
- package/dist/tools/think.d.cts +47 -0
- package/dist/tools/think.d.ts +47 -0
- package/dist/tools/think.js +50 -0
- package/dist/tools/think.js.map +1 -0
- package/dist/tools/weather/openMeteo.d.cts +1 -1
- package/dist/tools/weather/openMeteo.d.ts +1 -1
- package/dist/tools/web/webCrawler.d.cts +1 -1
- package/dist/tools/web/webCrawler.d.ts +1 -1
- package/dist/types-CJwiMH3u.d.ts +213 -0
- package/dist/types-W0QttuP_.d.cts +213 -0
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/workflows/agent.d.cts +3 -3
- package/dist/workflows/agent.d.ts +3 -3
- package/dist/workflows/workflow.d.cts +1 -1
- package/dist/workflows/workflow.d.ts +1 -1
- package/package.json +11 -11
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Message, AssistantMessage, MessageContentPart } from './backend/message.js';
|
|
2
|
-
import * as ai from 'ai';
|
|
3
2
|
import { Run, GetRunContext } from './context.js';
|
|
4
3
|
import { Serializable } from './internals/serializable.js';
|
|
5
|
-
import { C as Callback, E as Emitter } from './emitter-
|
|
4
|
+
import { C as Callback, E as Emitter } from './emitter-36-9MnvA.js';
|
|
6
5
|
import { FrameworkError } from './errors.js';
|
|
7
6
|
import { Task } from 'promise-based-task';
|
|
8
7
|
import { BaseCache } from './cache/base.js';
|
|
@@ -13,6 +12,7 @@ import { ZodSchema, z, ZodType } from 'zod';
|
|
|
13
12
|
import { SchemaObject } from 'ajv';
|
|
14
13
|
import { PromptTemplate } from './template.js';
|
|
15
14
|
import { Logger } from './logger/logger.js';
|
|
15
|
+
import { ToolCallPart } from 'ai';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Copyright 2025 © BeeAI a Series of LF Projects, LLC
|
|
@@ -39,6 +39,7 @@ interface ChatModelParameters {
|
|
|
39
39
|
presencePenalty?: number;
|
|
40
40
|
seed?: number;
|
|
41
41
|
stopSequences?: string[];
|
|
42
|
+
stream?: boolean;
|
|
42
43
|
}
|
|
43
44
|
interface ResponseObjectJson {
|
|
44
45
|
type: "object-json";
|
|
@@ -67,6 +68,7 @@ interface ChatModelInput extends ChatModelParameters {
|
|
|
67
68
|
responseFormat?: ZodSchema | ResponseObjectJson;
|
|
68
69
|
toolChoice?: ChatModelToolChoice;
|
|
69
70
|
messages: Message[];
|
|
71
|
+
streamPartialToolCalls?: boolean;
|
|
70
72
|
}
|
|
71
73
|
type ChatModelFinishReason = "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
|
|
72
74
|
interface ChatModelUsage {
|
|
@@ -113,11 +115,7 @@ declare abstract class ChatModel extends Serializable {
|
|
|
113
115
|
readonly modelSupportsToolCalling: boolean;
|
|
114
116
|
abstract get modelId(): string;
|
|
115
117
|
abstract get providerId(): string;
|
|
116
|
-
create(input: ChatModelInput
|
|
117
|
-
stream?: boolean;
|
|
118
|
-
}): Run<ChatModelOutput, this, readonly [ChatModelInput & {
|
|
119
|
-
stream?: boolean;
|
|
120
|
-
}]>;
|
|
118
|
+
create(input: ChatModelInput): Run<ChatModelOutput, this, readonly [ChatModelInput]>;
|
|
121
119
|
createStructure<T>(input: ChatModelObjectInput<T>): Run<ChatModelObjectOutput<T>, this, readonly [ChatModelObjectInput<T>]>;
|
|
122
120
|
config({ cache, parameters }: ChatConfig): void;
|
|
123
121
|
static fromName(name: FullModelName | ProviderName, options?: ChatModelParameters): Promise<ChatModel>;
|
|
@@ -150,7 +148,8 @@ declare class ChatModelOutput extends Serializable {
|
|
|
150
148
|
constructor(messages: Message[], usage?: ChatModelUsage | undefined, finishReason?: ChatModelFinishReason | undefined);
|
|
151
149
|
static fromChunks(chunks: ChatModelOutput[]): ChatModelOutput;
|
|
152
150
|
merge(other: ChatModelOutput): void;
|
|
153
|
-
|
|
151
|
+
dedupe(): void;
|
|
152
|
+
getToolCalls(): ToolCallPart[];
|
|
154
153
|
getTextMessages(): AssistantMessage[];
|
|
155
154
|
getTextContent(): string;
|
|
156
155
|
toString(): string;
|
package/dist/context.cjs
CHANGED
|
@@ -12,6 +12,11 @@ var stream_cjs = require('./internals/helpers/stream.cjs');
|
|
|
12
12
|
|
|
13
13
|
var __defProp = Object.defineProperty;
|
|
14
14
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
15
|
+
class Middleware {
|
|
16
|
+
static {
|
|
17
|
+
__name(this, "Middleware");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
15
20
|
class Run extends promise_cjs.LazyPromise {
|
|
16
21
|
static {
|
|
17
22
|
__name(this, "Run");
|
|
@@ -33,8 +38,10 @@ class Run extends promise_cjs.LazyPromise {
|
|
|
33
38
|
});
|
|
34
39
|
return this;
|
|
35
40
|
}
|
|
36
|
-
middleware(
|
|
37
|
-
|
|
41
|
+
middleware(...fns) {
|
|
42
|
+
for (const fn of fns) {
|
|
43
|
+
this.tasks.push(async () => remeda.isFunction(fn) ? fn(this.runContext) : fn.bind(this.runContext));
|
|
44
|
+
}
|
|
38
45
|
return this;
|
|
39
46
|
}
|
|
40
47
|
async before() {
|
|
@@ -117,20 +124,29 @@ class RunContext extends serializable_cjs.Serializable {
|
|
|
117
124
|
internal: true
|
|
118
125
|
}
|
|
119
126
|
});
|
|
127
|
+
const finishEvent = {};
|
|
120
128
|
try {
|
|
121
|
-
|
|
129
|
+
const startEvent = {
|
|
130
|
+
input: runContext.runParams,
|
|
131
|
+
output: void 0
|
|
132
|
+
};
|
|
133
|
+
await emitter.emit("start", startEvent);
|
|
134
|
+
runContext.runParams = startEvent.input;
|
|
135
|
+
finishEvent.input = startEvent.input;
|
|
122
136
|
const result = await Promise.race([
|
|
123
|
-
RunContext.#storage.run(runContext, fn, runContext),
|
|
137
|
+
RunContext.#storage.run(runContext, startEvent.output === void 0 ? fn : async () => startEvent.output, runContext),
|
|
124
138
|
new Promise((_, reject) => runContext.signal.addEventListener("abort", () => setTimeout(() => reject(runContext.signal.reason), 0)))
|
|
125
139
|
]);
|
|
140
|
+
finishEvent.output = result;
|
|
126
141
|
await emitter.emit("success", result);
|
|
127
142
|
return result;
|
|
128
143
|
} catch (_e) {
|
|
129
144
|
const e = errors_cjs.FrameworkError.ensure(_e);
|
|
145
|
+
finishEvent.output = e;
|
|
130
146
|
await emitter.emit("error", e);
|
|
131
147
|
throw e;
|
|
132
148
|
} finally {
|
|
133
|
-
await emitter.emit("finish",
|
|
149
|
+
await emitter.emit("finish", finishEvent);
|
|
134
150
|
runContext.destroy();
|
|
135
151
|
}
|
|
136
152
|
}, runContext);
|
|
@@ -155,6 +171,7 @@ class RunContext extends serializable_cjs.Serializable {
|
|
|
155
171
|
}
|
|
156
172
|
}
|
|
157
173
|
|
|
174
|
+
exports.Middleware = Middleware;
|
|
158
175
|
exports.Run = Run;
|
|
159
176
|
exports.RunContext = RunContext;
|
|
160
177
|
//# sourceMappingURL=context.cjs.map
|
package/dist/context.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context.ts"],"names":["Run","LazyPromise","tasks","handler","runContext","Symbol","toStringTag","observe","fn","push","emitter","context","value","Object","assign","middleware","before","executeSequentially","splice","Infinity","asyncIterator","response","then","isAsyncIterable","Error","RunContext","Serializable","AsyncLocalStorage","controller","runId","groupId","parentId","runParams","createdAt","signal","abort","reason","instance","input","parent","Date","params","createRandomHash","omit","AbortController","registerSignals","child","trace","id","parentRunId","pipe","destroy","FrameworkError","enter","getStore","namespace","creator","internal","emit","result","Promise","race","run","_","reject","addEventListener","setTimeout","_e","e","ensure","register","createSnapshot","shallowCopy","loadSnapshot","snapshot"],"mappings":"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","file":"context.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { omit } from \"remeda\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { registerSignals } from \"@/internals/helpers/cancellation.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { executeSequentially, LazyPromise } from \"@/internals/helpers/promise.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { isAsyncIterable } from \"@/internals/helpers/stream.js\";\n\nexport interface RunInstance<T = any> {\n emitter: Emitter<T>;\n}\n\nexport interface RunContextCallbacks {\n start: Callback<null>;\n success: Callback<unknown>;\n error: Callback<Error>;\n finish: Callback<null>;\n}\n\nexport type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;\nexport type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;\n\nexport class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {\n protected readonly tasks: (() => Promise<void>)[] = [];\n\n constructor(\n handler: () => Promise<R>,\n protected readonly runContext: GetRunContext<I, P>,\n ) {\n super(handler);\n }\n\n readonly [Symbol.toStringTag] = \"Promise\";\n\n observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void) {\n this.tasks.push(async () => fn(this.runContext.emitter));\n return this;\n }\n\n context(value: object) {\n this.tasks.push(async () => {\n Object.assign(this.runContext.context, value);\n Object.assign(this.runContext.emitter.context, value);\n });\n return this;\n }\n\n middleware(fn: (context: GetRunContext<I, P>) => void) {\n this.tasks.push(async () => fn(this.runContext));\n return this;\n }\n\n protected async before(): Promise<void> {\n await super.before();\n await executeSequentially(this.tasks.splice(0, Infinity));\n }\n\n // @ts-expect-error too complex\n async *[Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never {\n const response = await this.then();\n if (isAsyncIterable(response)) {\n yield* response;\n } else {\n throw new Error(\"Result is not iterable!\");\n }\n }\n}\n\nexport interface RunContextInput<P> {\n params: P;\n signal?: AbortSignal;\n}\n\nexport class RunContext<T extends RunInstance, P = any> extends Serializable {\n static #storage = new AsyncLocalStorage<RunContext<any>>();\n\n protected readonly controller: AbortController;\n public readonly runId: string;\n public readonly groupId: string;\n public readonly parentId?: string;\n public readonly emitter;\n public readonly context: object;\n public readonly runParams: P;\n public readonly createdAt: Date;\n\n get signal() {\n return this.controller.signal;\n }\n\n abort(reason?: Error) {\n this.controller.abort(reason);\n }\n\n constructor(\n public readonly instance: T,\n protected readonly input: RunContextInput<P>,\n parent?: RunContext<any>,\n ) {\n super();\n this.createdAt = new Date();\n this.runParams = input.params;\n this.runId = createRandomHash(5);\n this.parentId = parent?.runId;\n this.groupId = parent?.groupId ?? createRandomHash();\n this.context = omit((parent?.context ?? {}) as any, [\"id\", \"parentId\"]);\n\n this.controller = new AbortController();\n registerSignals(this.controller, [input.signal, parent?.signal]);\n\n this.emitter = instance.emitter.child<GetRunInstance<T>>({\n context: this.context,\n trace: {\n id: this.groupId,\n runId: this.runId,\n parentRunId: parent?.runId,\n },\n });\n if (parent) {\n this.emitter.pipe(parent.emitter);\n }\n }\n\n destroy() {\n this.emitter.destroy();\n this.controller.abort(new FrameworkError(\"Context destroyed.\"));\n }\n\n static enter<C2 extends RunInstance, R2, P2>(\n instance: C2,\n input: RunContextInput<P2>,\n fn: (context: GetRunContext<C2, P2>) => Promise<R2>,\n ) {\n const parent = RunContext.#storage.getStore();\n const runContext = new RunContext(instance, input, parent) as GetRunContext<C2, P2>;\n\n return new Run(async () => {\n const emitter = runContext.emitter.child<RunContextCallbacks>({\n namespace: [\"run\"],\n creator: runContext,\n context: { internal: true },\n });\n\n try {\n await emitter.emit(\"start\", null);\n const result = await Promise.race([\n RunContext.#storage.run(runContext, fn, runContext),\n new Promise<never>((_, reject) =>\n runContext.signal.addEventListener(\"abort\", () =>\n setTimeout(() => reject(runContext.signal.reason), 0),\n ),\n ),\n ]);\n await emitter.emit(\"success\", result);\n return result;\n } catch (_e) {\n const e = FrameworkError.ensure(_e);\n await emitter.emit(\"error\", e);\n throw e;\n } finally {\n await emitter.emit(\"finish\", null);\n runContext.destroy();\n }\n }, runContext);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n controller: this.controller,\n runId: this.runId,\n groupId: this.groupId,\n parentId: this.parentId,\n emitter: this.emitter,\n context: shallowCopy(this.context),\n runParams: shallowCopy(this.runParams),\n createdAt: new Date(this.createdAt),\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/context.ts"],"names":["Middleware","Run","LazyPromise","tasks","handler","runContext","Symbol","toStringTag","observe","fn","push","emitter","context","value","Object","assign","middleware","fns","isFunction","bind","before","executeSequentially","splice","Infinity","asyncIterator","response","then","isAsyncIterable","Error","RunContext","Serializable","AsyncLocalStorage","controller","runId","groupId","parentId","runParams","createdAt","signal","abort","reason","instance","input","parent","Date","params","createRandomHash","omit","AbortController","registerSignals","child","trace","id","parentRunId","pipe","destroy","FrameworkError","enter","getStore","namespace","creator","internal","finishEvent","startEvent","output","undefined","emit","result","Promise","race","run","_","reject","addEventListener","setTimeout","_e","e","ensure","register","createSnapshot","shallowCopy","loadSnapshot","snapshot"],"mappings":"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","file":"context.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { isFunction, omit } from \"remeda\";\nimport { Callback, InferCallbackValue } from \"@/emitter/types.js\";\nimport { registerSignals } from \"@/internals/helpers/cancellation.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { executeSequentially, LazyPromise } from \"@/internals/helpers/promise.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { isAsyncIterable } from \"@/internals/helpers/stream.js\";\n\nexport interface RunInstance<T = any> {\n emitter: Emitter<T>;\n}\n\nexport interface RunContextCallbacks {\n start: Callback<{ input: any; output: any }>;\n success: Callback<unknown>; // TODO: should be updated to Callback<{ input: any; output: any }>\n error: Callback<Error>;\n finish: Callback<{ input: any; output?: any; error?: FrameworkError }>;\n}\n\nexport abstract class Middleware<T extends RunInstance = any> {\n abstract bind(ctx: RunContext<T>): void;\n}\n\nexport type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;\nexport type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;\nexport type MiddlewareFn<T> = (context: GetRunContext<T>) => void;\nexport type MiddlewareType<T extends RunInstance> = Middleware<T> | MiddlewareFn<T>;\n\nexport class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {\n protected readonly tasks: (() => Promise<void>)[] = [];\n\n constructor(\n handler: () => Promise<R>,\n protected readonly runContext: GetRunContext<I, P>,\n ) {\n super(handler);\n }\n\n readonly [Symbol.toStringTag] = \"Promise\";\n\n observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void) {\n this.tasks.push(async () => fn(this.runContext.emitter));\n return this;\n }\n\n context(value: object) {\n this.tasks.push(async () => {\n Object.assign(this.runContext.context, value);\n Object.assign(this.runContext.emitter.context, value);\n });\n return this;\n }\n\n middleware(...fns: MiddlewareType<I>[]) {\n for (const fn of fns) {\n this.tasks.push(async () =>\n isFunction(fn) ? fn(this.runContext) : fn.bind(this.runContext),\n );\n }\n return this;\n }\n\n protected async before(): Promise<void> {\n await super.before();\n await executeSequentially(this.tasks.splice(0, Infinity));\n }\n\n // @ts-expect-error too complex\n async *[Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never {\n const response = await this.then();\n if (isAsyncIterable(response)) {\n yield* response;\n } else {\n throw new Error(\"Result is not iterable!\");\n }\n }\n}\n\nexport interface RunContextInput<P> {\n params: P;\n signal?: AbortSignal;\n}\n\nexport class RunContext<T extends RunInstance, P = any> extends Serializable {\n static #storage = new AsyncLocalStorage<RunContext<any>>();\n\n protected readonly controller: AbortController;\n public readonly runId: string;\n public readonly groupId: string;\n public readonly parentId?: string;\n public readonly emitter;\n public readonly context: object;\n public runParams: P;\n public readonly createdAt: Date;\n\n get signal() {\n return this.controller.signal;\n }\n\n abort(reason?: Error) {\n this.controller.abort(reason);\n }\n\n constructor(\n public readonly instance: T,\n protected readonly input: RunContextInput<P>,\n parent?: RunContext<any>,\n ) {\n super();\n this.createdAt = new Date();\n this.runParams = input.params;\n this.runId = createRandomHash(5);\n this.parentId = parent?.runId;\n this.groupId = parent?.groupId ?? createRandomHash();\n this.context = omit((parent?.context ?? {}) as any, [\"id\", \"parentId\"]);\n\n this.controller = new AbortController();\n registerSignals(this.controller, [input.signal, parent?.signal]);\n\n this.emitter = instance.emitter.child<GetRunInstance<T>>({\n context: this.context,\n trace: {\n id: this.groupId,\n runId: this.runId,\n parentRunId: parent?.runId,\n },\n });\n if (parent) {\n this.emitter.pipe(parent.emitter);\n }\n }\n\n destroy() {\n this.emitter.destroy();\n this.controller.abort(new FrameworkError(\"Context destroyed.\"));\n }\n\n static enter<C2 extends RunInstance, R2, P2>(\n instance: C2,\n input: RunContextInput<P2>,\n fn: (context: GetRunContext<C2, P2>) => Promise<R2>,\n ) {\n const parent = RunContext.#storage.getStore();\n const runContext = new RunContext(instance, input, parent) as GetRunContext<C2, P2>;\n\n return new Run(async () => {\n const emitter = runContext.emitter.child<RunContextCallbacks>({\n namespace: [\"run\"],\n creator: runContext,\n context: { internal: true },\n });\n\n const finishEvent = {} as InferCallbackValue<RunContextCallbacks[\"finish\"]>;\n try {\n const startEvent: InferCallbackValue<RunContextCallbacks[\"start\"]> = {\n input: runContext.runParams,\n output: undefined,\n };\n await emitter.emit(\"start\", startEvent);\n\n // Copy back any modifications made by middleware to run_params\n runContext.runParams = startEvent.input;\n finishEvent.input = startEvent.input;\n\n const result: R2 = await Promise.race([\n RunContext.#storage.run(\n runContext,\n startEvent.output === undefined ? fn : async () => startEvent.output,\n runContext,\n ),\n new Promise<never>((_, reject) =>\n runContext.signal.addEventListener(\"abort\", () =>\n setTimeout(() => reject(runContext.signal.reason), 0),\n ),\n ),\n ]);\n finishEvent.output = result;\n await emitter.emit(\"success\", result);\n return result;\n } catch (_e) {\n const e = FrameworkError.ensure(_e);\n finishEvent.output = e;\n await emitter.emit(\"error\", e);\n throw e;\n } finally {\n await emitter.emit(\"finish\", finishEvent);\n runContext.destroy();\n }\n }, runContext);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n controller: this.controller,\n runId: this.runId,\n groupId: this.groupId,\n parentId: this.parentId,\n emitter: this.emitter,\n context: shallowCopy(this.context),\n runParams: shallowCopy(this.runParams),\n createdAt: new Date(this.createdAt),\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
package/dist/context.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { E as Emitter, C as Callback } from './emitter-
|
|
1
|
+
import { E as Emitter, C as Callback } from './emitter-jN55XZZq.cjs';
|
|
2
2
|
import { Serializable } from './internals/serializable.cjs';
|
|
3
3
|
import { LazyPromise } from './internals/helpers/promise.cjs';
|
|
4
|
+
import { FrameworkError } from './errors.cjs';
|
|
4
5
|
import './internals/types.cjs';
|
|
5
6
|
import './internals/helpers/guards.cjs';
|
|
6
7
|
|
|
@@ -13,13 +14,25 @@ interface RunInstance<T = any> {
|
|
|
13
14
|
emitter: Emitter<T>;
|
|
14
15
|
}
|
|
15
16
|
interface RunContextCallbacks {
|
|
16
|
-
start: Callback<
|
|
17
|
+
start: Callback<{
|
|
18
|
+
input: any;
|
|
19
|
+
output: any;
|
|
20
|
+
}>;
|
|
17
21
|
success: Callback<unknown>;
|
|
18
22
|
error: Callback<Error>;
|
|
19
|
-
finish: Callback<
|
|
23
|
+
finish: Callback<{
|
|
24
|
+
input: any;
|
|
25
|
+
output?: any;
|
|
26
|
+
error?: FrameworkError;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
declare abstract class Middleware<T extends RunInstance = any> {
|
|
30
|
+
abstract bind(ctx: RunContext<T>): void;
|
|
20
31
|
}
|
|
21
32
|
type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;
|
|
22
33
|
type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;
|
|
34
|
+
type MiddlewareFn<T> = (context: GetRunContext<T>) => void;
|
|
35
|
+
type MiddlewareType<T extends RunInstance> = Middleware<T> | MiddlewareFn<T>;
|
|
23
36
|
declare class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {
|
|
24
37
|
protected readonly runContext: GetRunContext<I, P>;
|
|
25
38
|
protected readonly tasks: (() => Promise<void>)[];
|
|
@@ -27,7 +40,7 @@ declare class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {
|
|
|
27
40
|
readonly [Symbol.toStringTag] = "Promise";
|
|
28
41
|
observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void): this;
|
|
29
42
|
context(value: object): this;
|
|
30
|
-
middleware(
|
|
43
|
+
middleware(...fns: MiddlewareType<I>[]): this;
|
|
31
44
|
protected before(): Promise<void>;
|
|
32
45
|
[Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never;
|
|
33
46
|
}
|
|
@@ -45,7 +58,7 @@ declare class RunContext<T extends RunInstance, P = any> extends Serializable {
|
|
|
45
58
|
readonly parentId?: string;
|
|
46
59
|
readonly emitter: Emitter<GetRunInstance<T>>;
|
|
47
60
|
readonly context: object;
|
|
48
|
-
|
|
61
|
+
runParams: P;
|
|
49
62
|
readonly createdAt: Date;
|
|
50
63
|
get signal(): AbortSignal;
|
|
51
64
|
abort(reason?: Error): void;
|
|
@@ -65,4 +78,4 @@ declare class RunContext<T extends RunInstance, P = any> extends Serializable {
|
|
|
65
78
|
loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>): void;
|
|
66
79
|
}
|
|
67
80
|
|
|
68
|
-
export { type GetRunContext, type GetRunInstance, Run, RunContext, type RunContextCallbacks, type RunContextInput, type RunInstance };
|
|
81
|
+
export { type GetRunContext, type GetRunInstance, Middleware, type MiddlewareFn, type MiddlewareType, Run, RunContext, type RunContextCallbacks, type RunContextInput, type RunInstance };
|
package/dist/context.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { E as Emitter, C as Callback } from './emitter-
|
|
1
|
+
import { E as Emitter, C as Callback } from './emitter-36-9MnvA.js';
|
|
2
2
|
import { Serializable } from './internals/serializable.js';
|
|
3
3
|
import { LazyPromise } from './internals/helpers/promise.js';
|
|
4
|
+
import { FrameworkError } from './errors.js';
|
|
4
5
|
import './internals/types.js';
|
|
5
6
|
import './internals/helpers/guards.js';
|
|
6
7
|
|
|
@@ -13,13 +14,25 @@ interface RunInstance<T = any> {
|
|
|
13
14
|
emitter: Emitter<T>;
|
|
14
15
|
}
|
|
15
16
|
interface RunContextCallbacks {
|
|
16
|
-
start: Callback<
|
|
17
|
+
start: Callback<{
|
|
18
|
+
input: any;
|
|
19
|
+
output: any;
|
|
20
|
+
}>;
|
|
17
21
|
success: Callback<unknown>;
|
|
18
22
|
error: Callback<Error>;
|
|
19
|
-
finish: Callback<
|
|
23
|
+
finish: Callback<{
|
|
24
|
+
input: any;
|
|
25
|
+
output?: any;
|
|
26
|
+
error?: FrameworkError;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
declare abstract class Middleware<T extends RunInstance = any> {
|
|
30
|
+
abstract bind(ctx: RunContext<T>): void;
|
|
20
31
|
}
|
|
21
32
|
type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;
|
|
22
33
|
type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;
|
|
34
|
+
type MiddlewareFn<T> = (context: GetRunContext<T>) => void;
|
|
35
|
+
type MiddlewareType<T extends RunInstance> = Middleware<T> | MiddlewareFn<T>;
|
|
23
36
|
declare class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {
|
|
24
37
|
protected readonly runContext: GetRunContext<I, P>;
|
|
25
38
|
protected readonly tasks: (() => Promise<void>)[];
|
|
@@ -27,7 +40,7 @@ declare class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {
|
|
|
27
40
|
readonly [Symbol.toStringTag] = "Promise";
|
|
28
41
|
observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void): this;
|
|
29
42
|
context(value: object): this;
|
|
30
|
-
middleware(
|
|
43
|
+
middleware(...fns: MiddlewareType<I>[]): this;
|
|
31
44
|
protected before(): Promise<void>;
|
|
32
45
|
[Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never;
|
|
33
46
|
}
|
|
@@ -45,7 +58,7 @@ declare class RunContext<T extends RunInstance, P = any> extends Serializable {
|
|
|
45
58
|
readonly parentId?: string;
|
|
46
59
|
readonly emitter: Emitter<GetRunInstance<T>>;
|
|
47
60
|
readonly context: object;
|
|
48
|
-
|
|
61
|
+
runParams: P;
|
|
49
62
|
readonly createdAt: Date;
|
|
50
63
|
get signal(): AbortSignal;
|
|
51
64
|
abort(reason?: Error): void;
|
|
@@ -65,4 +78,4 @@ declare class RunContext<T extends RunInstance, P = any> extends Serializable {
|
|
|
65
78
|
loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>): void;
|
|
66
79
|
}
|
|
67
80
|
|
|
68
|
-
export { type GetRunContext, type GetRunInstance, Run, RunContext, type RunContextCallbacks, type RunContextInput, type RunInstance };
|
|
81
|
+
export { type GetRunContext, type GetRunInstance, Middleware, type MiddlewareFn, type MiddlewareType, Run, RunContext, type RunContextCallbacks, type RunContextInput, type RunInstance };
|
package/dist/context.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
2
|
import { createRandomHash } from './internals/helpers/hash.js';
|
|
3
|
-
import { omit } from 'remeda';
|
|
3
|
+
import { isFunction, omit } from 'remeda';
|
|
4
4
|
import { registerSignals } from './internals/helpers/cancellation.js';
|
|
5
5
|
import { Serializable } from './internals/serializable.js';
|
|
6
6
|
import { LazyPromise, executeSequentially } from './internals/helpers/promise.js';
|
|
@@ -10,6 +10,11 @@ import { isAsyncIterable } from './internals/helpers/stream.js';
|
|
|
10
10
|
|
|
11
11
|
var __defProp = Object.defineProperty;
|
|
12
12
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
|
+
class Middleware {
|
|
14
|
+
static {
|
|
15
|
+
__name(this, "Middleware");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
13
18
|
class Run extends LazyPromise {
|
|
14
19
|
static {
|
|
15
20
|
__name(this, "Run");
|
|
@@ -31,8 +36,10 @@ class Run extends LazyPromise {
|
|
|
31
36
|
});
|
|
32
37
|
return this;
|
|
33
38
|
}
|
|
34
|
-
middleware(
|
|
35
|
-
|
|
39
|
+
middleware(...fns) {
|
|
40
|
+
for (const fn of fns) {
|
|
41
|
+
this.tasks.push(async () => isFunction(fn) ? fn(this.runContext) : fn.bind(this.runContext));
|
|
42
|
+
}
|
|
36
43
|
return this;
|
|
37
44
|
}
|
|
38
45
|
async before() {
|
|
@@ -115,20 +122,29 @@ class RunContext extends Serializable {
|
|
|
115
122
|
internal: true
|
|
116
123
|
}
|
|
117
124
|
});
|
|
125
|
+
const finishEvent = {};
|
|
118
126
|
try {
|
|
119
|
-
|
|
127
|
+
const startEvent = {
|
|
128
|
+
input: runContext.runParams,
|
|
129
|
+
output: void 0
|
|
130
|
+
};
|
|
131
|
+
await emitter.emit("start", startEvent);
|
|
132
|
+
runContext.runParams = startEvent.input;
|
|
133
|
+
finishEvent.input = startEvent.input;
|
|
120
134
|
const result = await Promise.race([
|
|
121
|
-
RunContext.#storage.run(runContext, fn, runContext),
|
|
135
|
+
RunContext.#storage.run(runContext, startEvent.output === void 0 ? fn : async () => startEvent.output, runContext),
|
|
122
136
|
new Promise((_, reject) => runContext.signal.addEventListener("abort", () => setTimeout(() => reject(runContext.signal.reason), 0)))
|
|
123
137
|
]);
|
|
138
|
+
finishEvent.output = result;
|
|
124
139
|
await emitter.emit("success", result);
|
|
125
140
|
return result;
|
|
126
141
|
} catch (_e) {
|
|
127
142
|
const e = FrameworkError.ensure(_e);
|
|
143
|
+
finishEvent.output = e;
|
|
128
144
|
await emitter.emit("error", e);
|
|
129
145
|
throw e;
|
|
130
146
|
} finally {
|
|
131
|
-
await emitter.emit("finish",
|
|
147
|
+
await emitter.emit("finish", finishEvent);
|
|
132
148
|
runContext.destroy();
|
|
133
149
|
}
|
|
134
150
|
}, runContext);
|
|
@@ -153,6 +169,6 @@ class RunContext extends Serializable {
|
|
|
153
169
|
}
|
|
154
170
|
}
|
|
155
171
|
|
|
156
|
-
export { Run, RunContext };
|
|
172
|
+
export { Middleware, Run, RunContext };
|
|
157
173
|
//# sourceMappingURL=context.js.map
|
|
158
174
|
//# sourceMappingURL=context.js.map
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context.ts"],"names":["Run","LazyPromise","tasks","handler","runContext","Symbol","toStringTag","observe","fn","push","emitter","context","value","Object","assign","middleware","before","executeSequentially","splice","Infinity","asyncIterator","response","then","isAsyncIterable","Error","RunContext","Serializable","AsyncLocalStorage","controller","runId","groupId","parentId","runParams","createdAt","signal","abort","reason","instance","input","parent","Date","params","createRandomHash","omit","AbortController","registerSignals","child","trace","id","parentRunId","pipe","destroy","FrameworkError","enter","getStore","namespace","creator","internal","emit","result","Promise","race","run","_","reject","addEventListener","setTimeout","_e","e","ensure","register","createSnapshot","shallowCopy","loadSnapshot","snapshot"],"mappings":"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","file":"context.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { omit } from \"remeda\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { registerSignals } from \"@/internals/helpers/cancellation.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { executeSequentially, LazyPromise } from \"@/internals/helpers/promise.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { isAsyncIterable } from \"@/internals/helpers/stream.js\";\n\nexport interface RunInstance<T = any> {\n emitter: Emitter<T>;\n}\n\nexport interface RunContextCallbacks {\n start: Callback<null>;\n success: Callback<unknown>;\n error: Callback<Error>;\n finish: Callback<null>;\n}\n\nexport type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;\nexport type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;\n\nexport class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {\n protected readonly tasks: (() => Promise<void>)[] = [];\n\n constructor(\n handler: () => Promise<R>,\n protected readonly runContext: GetRunContext<I, P>,\n ) {\n super(handler);\n }\n\n readonly [Symbol.toStringTag] = \"Promise\";\n\n observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void) {\n this.tasks.push(async () => fn(this.runContext.emitter));\n return this;\n }\n\n context(value: object) {\n this.tasks.push(async () => {\n Object.assign(this.runContext.context, value);\n Object.assign(this.runContext.emitter.context, value);\n });\n return this;\n }\n\n middleware(fn: (context: GetRunContext<I, P>) => void) {\n this.tasks.push(async () => fn(this.runContext));\n return this;\n }\n\n protected async before(): Promise<void> {\n await super.before();\n await executeSequentially(this.tasks.splice(0, Infinity));\n }\n\n // @ts-expect-error too complex\n async *[Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never {\n const response = await this.then();\n if (isAsyncIterable(response)) {\n yield* response;\n } else {\n throw new Error(\"Result is not iterable!\");\n }\n }\n}\n\nexport interface RunContextInput<P> {\n params: P;\n signal?: AbortSignal;\n}\n\nexport class RunContext<T extends RunInstance, P = any> extends Serializable {\n static #storage = new AsyncLocalStorage<RunContext<any>>();\n\n protected readonly controller: AbortController;\n public readonly runId: string;\n public readonly groupId: string;\n public readonly parentId?: string;\n public readonly emitter;\n public readonly context: object;\n public readonly runParams: P;\n public readonly createdAt: Date;\n\n get signal() {\n return this.controller.signal;\n }\n\n abort(reason?: Error) {\n this.controller.abort(reason);\n }\n\n constructor(\n public readonly instance: T,\n protected readonly input: RunContextInput<P>,\n parent?: RunContext<any>,\n ) {\n super();\n this.createdAt = new Date();\n this.runParams = input.params;\n this.runId = createRandomHash(5);\n this.parentId = parent?.runId;\n this.groupId = parent?.groupId ?? createRandomHash();\n this.context = omit((parent?.context ?? {}) as any, [\"id\", \"parentId\"]);\n\n this.controller = new AbortController();\n registerSignals(this.controller, [input.signal, parent?.signal]);\n\n this.emitter = instance.emitter.child<GetRunInstance<T>>({\n context: this.context,\n trace: {\n id: this.groupId,\n runId: this.runId,\n parentRunId: parent?.runId,\n },\n });\n if (parent) {\n this.emitter.pipe(parent.emitter);\n }\n }\n\n destroy() {\n this.emitter.destroy();\n this.controller.abort(new FrameworkError(\"Context destroyed.\"));\n }\n\n static enter<C2 extends RunInstance, R2, P2>(\n instance: C2,\n input: RunContextInput<P2>,\n fn: (context: GetRunContext<C2, P2>) => Promise<R2>,\n ) {\n const parent = RunContext.#storage.getStore();\n const runContext = new RunContext(instance, input, parent) as GetRunContext<C2, P2>;\n\n return new Run(async () => {\n const emitter = runContext.emitter.child<RunContextCallbacks>({\n namespace: [\"run\"],\n creator: runContext,\n context: { internal: true },\n });\n\n try {\n await emitter.emit(\"start\", null);\n const result = await Promise.race([\n RunContext.#storage.run(runContext, fn, runContext),\n new Promise<never>((_, reject) =>\n runContext.signal.addEventListener(\"abort\", () =>\n setTimeout(() => reject(runContext.signal.reason), 0),\n ),\n ),\n ]);\n await emitter.emit(\"success\", result);\n return result;\n } catch (_e) {\n const e = FrameworkError.ensure(_e);\n await emitter.emit(\"error\", e);\n throw e;\n } finally {\n await emitter.emit(\"finish\", null);\n runContext.destroy();\n }\n }, runContext);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n controller: this.controller,\n runId: this.runId,\n groupId: this.groupId,\n parentId: this.parentId,\n emitter: this.emitter,\n context: shallowCopy(this.context),\n runParams: shallowCopy(this.runParams),\n createdAt: new Date(this.createdAt),\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/context.ts"],"names":["Middleware","Run","LazyPromise","tasks","handler","runContext","Symbol","toStringTag","observe","fn","push","emitter","context","value","Object","assign","middleware","fns","isFunction","bind","before","executeSequentially","splice","Infinity","asyncIterator","response","then","isAsyncIterable","Error","RunContext","Serializable","AsyncLocalStorage","controller","runId","groupId","parentId","runParams","createdAt","signal","abort","reason","instance","input","parent","Date","params","createRandomHash","omit","AbortController","registerSignals","child","trace","id","parentRunId","pipe","destroy","FrameworkError","enter","getStore","namespace","creator","internal","finishEvent","startEvent","output","undefined","emit","result","Promise","race","run","_","reject","addEventListener","setTimeout","_e","e","ensure","register","createSnapshot","shallowCopy","loadSnapshot","snapshot"],"mappings":"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","file":"context.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { isFunction, omit } from \"remeda\";\nimport { Callback, InferCallbackValue } from \"@/emitter/types.js\";\nimport { registerSignals } from \"@/internals/helpers/cancellation.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { executeSequentially, LazyPromise } from \"@/internals/helpers/promise.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { isAsyncIterable } from \"@/internals/helpers/stream.js\";\n\nexport interface RunInstance<T = any> {\n emitter: Emitter<T>;\n}\n\nexport interface RunContextCallbacks {\n start: Callback<{ input: any; output: any }>;\n success: Callback<unknown>; // TODO: should be updated to Callback<{ input: any; output: any }>\n error: Callback<Error>;\n finish: Callback<{ input: any; output?: any; error?: FrameworkError }>;\n}\n\nexport abstract class Middleware<T extends RunInstance = any> {\n abstract bind(ctx: RunContext<T>): void;\n}\n\nexport type GetRunContext<T, P = any> = T extends RunInstance ? RunContext<T, P> : never;\nexport type GetRunInstance<T> = T extends RunInstance<infer P> ? P : never;\nexport type MiddlewareFn<T> = (context: GetRunContext<T>) => void;\nexport type MiddlewareType<T extends RunInstance> = Middleware<T> | MiddlewareFn<T>;\n\nexport class Run<R, I extends RunInstance, P = any> extends LazyPromise<R> {\n protected readonly tasks: (() => Promise<void>)[] = [];\n\n constructor(\n handler: () => Promise<R>,\n protected readonly runContext: GetRunContext<I, P>,\n ) {\n super(handler);\n }\n\n readonly [Symbol.toStringTag] = \"Promise\";\n\n observe(fn: (emitter: Emitter<GetRunInstance<I>>) => void) {\n this.tasks.push(async () => fn(this.runContext.emitter));\n return this;\n }\n\n context(value: object) {\n this.tasks.push(async () => {\n Object.assign(this.runContext.context, value);\n Object.assign(this.runContext.emitter.context, value);\n });\n return this;\n }\n\n middleware(...fns: MiddlewareType<I>[]) {\n for (const fn of fns) {\n this.tasks.push(async () =>\n isFunction(fn) ? fn(this.runContext) : fn.bind(this.runContext),\n );\n }\n return this;\n }\n\n protected async before(): Promise<void> {\n await super.before();\n await executeSequentially(this.tasks.splice(0, Infinity));\n }\n\n // @ts-expect-error too complex\n async *[Symbol.asyncIterator](): R extends AsyncIterable<infer X> ? AsyncIterator<X> : never {\n const response = await this.then();\n if (isAsyncIterable(response)) {\n yield* response;\n } else {\n throw new Error(\"Result is not iterable!\");\n }\n }\n}\n\nexport interface RunContextInput<P> {\n params: P;\n signal?: AbortSignal;\n}\n\nexport class RunContext<T extends RunInstance, P = any> extends Serializable {\n static #storage = new AsyncLocalStorage<RunContext<any>>();\n\n protected readonly controller: AbortController;\n public readonly runId: string;\n public readonly groupId: string;\n public readonly parentId?: string;\n public readonly emitter;\n public readonly context: object;\n public runParams: P;\n public readonly createdAt: Date;\n\n get signal() {\n return this.controller.signal;\n }\n\n abort(reason?: Error) {\n this.controller.abort(reason);\n }\n\n constructor(\n public readonly instance: T,\n protected readonly input: RunContextInput<P>,\n parent?: RunContext<any>,\n ) {\n super();\n this.createdAt = new Date();\n this.runParams = input.params;\n this.runId = createRandomHash(5);\n this.parentId = parent?.runId;\n this.groupId = parent?.groupId ?? createRandomHash();\n this.context = omit((parent?.context ?? {}) as any, [\"id\", \"parentId\"]);\n\n this.controller = new AbortController();\n registerSignals(this.controller, [input.signal, parent?.signal]);\n\n this.emitter = instance.emitter.child<GetRunInstance<T>>({\n context: this.context,\n trace: {\n id: this.groupId,\n runId: this.runId,\n parentRunId: parent?.runId,\n },\n });\n if (parent) {\n this.emitter.pipe(parent.emitter);\n }\n }\n\n destroy() {\n this.emitter.destroy();\n this.controller.abort(new FrameworkError(\"Context destroyed.\"));\n }\n\n static enter<C2 extends RunInstance, R2, P2>(\n instance: C2,\n input: RunContextInput<P2>,\n fn: (context: GetRunContext<C2, P2>) => Promise<R2>,\n ) {\n const parent = RunContext.#storage.getStore();\n const runContext = new RunContext(instance, input, parent) as GetRunContext<C2, P2>;\n\n return new Run(async () => {\n const emitter = runContext.emitter.child<RunContextCallbacks>({\n namespace: [\"run\"],\n creator: runContext,\n context: { internal: true },\n });\n\n const finishEvent = {} as InferCallbackValue<RunContextCallbacks[\"finish\"]>;\n try {\n const startEvent: InferCallbackValue<RunContextCallbacks[\"start\"]> = {\n input: runContext.runParams,\n output: undefined,\n };\n await emitter.emit(\"start\", startEvent);\n\n // Copy back any modifications made by middleware to run_params\n runContext.runParams = startEvent.input;\n finishEvent.input = startEvent.input;\n\n const result: R2 = await Promise.race([\n RunContext.#storage.run(\n runContext,\n startEvent.output === undefined ? fn : async () => startEvent.output,\n runContext,\n ),\n new Promise<never>((_, reject) =>\n runContext.signal.addEventListener(\"abort\", () =>\n setTimeout(() => reject(runContext.signal.reason), 0),\n ),\n ),\n ]);\n finishEvent.output = result;\n await emitter.emit(\"success\", result);\n return result;\n } catch (_e) {\n const e = FrameworkError.ensure(_e);\n finishEvent.output = e;\n await emitter.emit(\"error\", e);\n throw e;\n } finally {\n await emitter.emit(\"finish\", finishEvent);\n runContext.destroy();\n }\n }, runContext);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n controller: this.controller,\n runId: this.runId,\n groupId: this.groupId,\n parentId: this.parentId,\n emitter: this.emitter,\n context: shallowCopy(this.context),\n runParams: shallowCopy(this.runParams),\n createdAt: new Date(this.createdAt),\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
|
package/dist/emitter/emitter.cjs
CHANGED
|
@@ -7,6 +7,7 @@ var hash_cjs = require('../internals/helpers/hash.cjs');
|
|
|
7
7
|
var utils_cjs$1 = require('../serializer/utils.cjs');
|
|
8
8
|
var serializable_cjs = require('../internals/serializable.cjs');
|
|
9
9
|
var remeda = require('remeda');
|
|
10
|
+
var array_cjs = require('../internals/helpers/array.cjs');
|
|
10
11
|
|
|
11
12
|
var __defProp = Object.defineProperty;
|
|
12
13
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -25,7 +26,7 @@ class Emitter extends serializable_cjs.Serializable {
|
|
|
25
26
|
static {
|
|
26
27
|
__name(this, "Emitter");
|
|
27
28
|
}
|
|
28
|
-
listeners =
|
|
29
|
+
listeners = [];
|
|
29
30
|
groupId;
|
|
30
31
|
namespace;
|
|
31
32
|
creator;
|
|
@@ -84,21 +85,18 @@ class Emitter extends serializable_cjs.Serializable {
|
|
|
84
85
|
{
|
|
85
86
|
isBlocking: true,
|
|
86
87
|
once: false,
|
|
87
|
-
persistent: true
|
|
88
|
+
persistent: true,
|
|
89
|
+
matchNested: false
|
|
88
90
|
}
|
|
89
91
|
);
|
|
90
92
|
}
|
|
91
93
|
destroy() {
|
|
92
|
-
this.listeners.
|
|
94
|
+
this.listeners.length = 0;
|
|
93
95
|
this.cleanups.forEach((child) => child());
|
|
94
96
|
this.cleanups.length = 0;
|
|
95
97
|
}
|
|
96
98
|
reset() {
|
|
97
|
-
|
|
98
|
-
if (!listener.options?.persistent) {
|
|
99
|
-
this.listeners.delete(listener);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
99
|
+
this.listeners = this.listeners.filter((listener) => listener.options?.persistent);
|
|
102
100
|
}
|
|
103
101
|
registerCallbacks(callbacks, options) {
|
|
104
102
|
const listeners = [];
|
|
@@ -153,8 +151,16 @@ class Emitter extends serializable_cjs.Serializable {
|
|
|
153
151
|
raw: matcher,
|
|
154
152
|
match: createMatcher()
|
|
155
153
|
};
|
|
156
|
-
|
|
157
|
-
|
|
154
|
+
const priority = options?.priority ?? 0;
|
|
155
|
+
const insertIndex = this.listeners.findIndex((l) => (l.options?.priority ?? 0) >= priority);
|
|
156
|
+
if (insertIndex === -1) {
|
|
157
|
+
this.listeners.push(listener);
|
|
158
|
+
} else {
|
|
159
|
+
this.listeners.splice(insertIndex, 0, listener);
|
|
160
|
+
}
|
|
161
|
+
return () => {
|
|
162
|
+
array_cjs.removeFromArray(this.listeners, listener);
|
|
163
|
+
};
|
|
158
164
|
}
|
|
159
165
|
async emit(name, value) {
|
|
160
166
|
utils_cjs.assertValidName(name);
|
|
@@ -163,12 +169,13 @@ class Emitter extends serializable_cjs.Serializable {
|
|
|
163
169
|
}
|
|
164
170
|
async invoke(data, event) {
|
|
165
171
|
const executions = [];
|
|
166
|
-
for (
|
|
172
|
+
for (let i = this.listeners.length - 1; i >= 0; i--) {
|
|
173
|
+
const listener = this.listeners[i];
|
|
167
174
|
if (!listener.match(event)) {
|
|
168
175
|
continue;
|
|
169
176
|
}
|
|
170
177
|
if (listener.options?.once) {
|
|
171
|
-
this.listeners.
|
|
178
|
+
this.listeners.splice(i, 1);
|
|
172
179
|
}
|
|
173
180
|
const run = /* @__PURE__ */ __name(async () => listener.callback(data, event), "run");
|
|
174
181
|
executions.push(listener.options?.isBlocking ? await run() : run());
|
|
@@ -196,7 +203,7 @@ class Emitter extends serializable_cjs.Serializable {
|
|
|
196
203
|
creator: this.creator,
|
|
197
204
|
context: this.context,
|
|
198
205
|
trace: this.trace,
|
|
199
|
-
listeners:
|
|
206
|
+
listeners: this.listeners.map(remeda.pick([
|
|
200
207
|
"raw",
|
|
201
208
|
"options",
|
|
202
209
|
"callback"
|
|
@@ -206,7 +213,7 @@ class Emitter extends serializable_cjs.Serializable {
|
|
|
206
213
|
}
|
|
207
214
|
loadSnapshot({ listeners, ...snapshot }) {
|
|
208
215
|
Object.assign(this, snapshot, {
|
|
209
|
-
listeners:
|
|
216
|
+
listeners: []
|
|
210
217
|
});
|
|
211
218
|
listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));
|
|
212
219
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/emitter/emitter.ts"],"names":["Emitter","Serializable","listeners","Set","groupId","namespace","creator","context","trace","cleanups","input","Object","prototype","assertValidNamespace","register","root","create","child","slice","cleanup","pipe","push","target","on","toBoundedFunction","args","invoke","value","name","isBlocking","once","persistent","destroy","clear","forEach","length","reset","listener","options","delete","registerCallbacks","callbacks","entries","key","event","callback","match","matcher","createMatcher","matchers","matchNested","path","createFullPath","RegExp","test","isPath","EmitterError","matchSameRun","runId","unshift","every","raw","add","emit","assertValidName","createEvent","data","executions","values","run","Promise","all","id","createRandomHash","createdAt","Date","source","assign","shallowCopy","createSnapshot","Array","from","map","pick","loadSnapshot","snapshot"],"mappings":"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","file":"emitter.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Callback,\n CleanupFn,\n EmitterOptions,\n EventMeta,\n EventTrace,\n Matcher,\n MatcherFn,\n StringKey,\n} from \"@/emitter/types.js\";\nexport type { EventMeta, EventTrace, Callback };\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { createFullPath, isPath, assertValidName, assertValidNamespace } from \"@/emitter/utils.js\";\nimport { EmitterError } from \"@/emitter/errors.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { shallowCopy, toBoundedFunction } from \"@/serializer/utils.js\";\nimport { RequiredAll } from \"@/internals/types.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { pick } from \"remeda\";\n\nexport interface EmitterInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\nexport interface EmitterChildInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\n\ninterface Listener<T = any> {\n readonly match: MatcherFn;\n readonly raw: Matcher;\n readonly callback: Callback<T>;\n readonly options?: EmitterOptions;\n}\n\nexport class Emitter<T = Record<keyof any, Callback<unknown>>> extends Serializable {\n protected listeners = new Set<Listener>();\n protected readonly groupId?: string;\n public readonly namespace: string[];\n public readonly creator?: object;\n public readonly context: object;\n public readonly trace?: EventTrace;\n protected readonly cleanups: CleanupFn[] = [];\n\n constructor(input: EmitterInput = {}) {\n super();\n this.groupId = input?.groupId;\n this.namespace = input?.namespace ?? [];\n this.creator = input.creator ?? Object.prototype;\n this.context = input?.context ?? {};\n this.trace = input.trace;\n assertValidNamespace(this.namespace);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n static get root() {\n return new Emitter<Record<string, Callback<any>>>({ creator: Object.create(null) });\n }\n\n child<R = T>(input: EmitterChildInput = {}): Emitter<R> {\n const child = new Emitter<R>({\n trace: input.trace ?? this.trace,\n groupId: input?.groupId ?? this.groupId,\n context: { ...this.context, ...input?.context },\n creator: input?.creator ?? this.creator,\n namespace: input?.namespace\n ? [...this.namespace, ...input.namespace]\n : this.namespace.slice(),\n });\n\n const cleanup = child.pipe(this);\n this.cleanups.push(cleanup);\n\n return child;\n }\n\n pipe(target: Emitter<any>): CleanupFn {\n return this.on(\n // @ts-expect-error\n \"*.*\",\n toBoundedFunction(\n // @ts-expect-error\n (...args) => target.invoke(...args),\n [{ value: target, name: \"target\" }],\n ),\n {\n isBlocking: true,\n once: false,\n persistent: true,\n },\n );\n }\n\n destroy() {\n this.listeners.clear();\n this.cleanups.forEach((child) => child());\n this.cleanups.length = 0;\n }\n\n reset() {\n for (const listener of this.listeners) {\n if (!listener.options?.persistent) {\n this.listeners.delete(listener);\n }\n }\n }\n\n registerCallbacks<K extends StringKey<RequiredAll<T>>>(\n callbacks: Partial<\n Record<K, NonNullable<T[K]> extends Callback<infer X> ? Callback<X> : never>\n >,\n options?: Partial<Record<K, EmitterOptions>>,\n ): CleanupFn {\n const listeners: CleanupFn[] = [];\n Object.entries(callbacks).forEach(([key, value]) => {\n if (value) {\n // @ts-expect-error\n listeners.push(this.on(key, value, options?.[key]));\n }\n });\n return () => listeners.forEach((cleanup) => cleanup());\n }\n\n on<K extends StringKey<RequiredAll<T>>>(\n event: K,\n callback: NonNullable<T[K]> extends Callback<any> ? T[K] : never,\n options?: EmitterOptions,\n ): CleanupFn {\n return this.match(event as Matcher, callback as Callback<any>, options);\n }\n\n match<L>(matcher: Matcher, callback: Callback<L>, options?: EmitterOptions): CleanupFn {\n const createMatcher = (): MatcherFn => {\n const matchers: MatcherFn[] = [];\n let matchNested = options?.matchNested;\n\n if (matcher === \"*\") {\n matchNested ??= false;\n matchers.push((event) => event.path === createFullPath(this.namespace, event.name));\n } else if (matcher === \"*.*\") {\n matchNested ??= true;\n matchers.push(() => true);\n } else if (matcher instanceof RegExp) {\n matchNested ??= true;\n matchers.push((event) => matcher.test(event.path));\n } else if (typeof matcher === \"function\") {\n matchNested ??= false;\n matchers.push(matcher);\n } else if (typeof matcher === \"string\") {\n if (isPath(matcher)) {\n matchNested ??= true;\n matchers.push((event) => event.path === matcher);\n } else {\n matchNested ??= false;\n matchers.push(\n (event) =>\n event.name === matcher && event.path === createFullPath(this.namespace, event.name),\n );\n }\n } else {\n throw new EmitterError(\"Invalid matcher provided!\");\n }\n\n if (!matchNested) {\n const matchSameRun = (event: EventMeta) => {\n // global observability x scoped observability\n return !this.trace?.runId ? true : this.trace?.runId === event.trace?.runId;\n };\n matchers.unshift(matchSameRun);\n }\n\n return (event) => matchers.every((matcher) => matcher(event));\n };\n\n const listener: Listener = {\n options,\n callback,\n raw: matcher,\n match: createMatcher(),\n };\n this.listeners.add(listener);\n\n return () => this.listeners.delete(listener);\n }\n\n async emit<K extends StringKey<RequiredAll<T>>>(\n name: K,\n value: NonNullable<T[K]> extends Callback<infer X> ? X : unknown,\n ): Promise<void> {\n assertValidName(name);\n\n const event = this.createEvent(name);\n return await this.invoke(value, event);\n }\n\n protected async invoke(data: unknown, event: EventMeta) {\n const executions: unknown[] = [];\n for (const listener of this.listeners.values()) {\n if (!listener.match(event)) {\n continue;\n }\n\n if (listener.options?.once) {\n this.listeners.delete(listener);\n }\n\n const run = async () => listener.callback(data, event);\n executions.push(listener.options?.isBlocking ? await run() : run());\n }\n await Promise.all(executions);\n }\n\n protected createEvent(name: string): EventMeta {\n return {\n id: createRandomHash(),\n groupId: this.groupId,\n name,\n path: createFullPath(this.namespace, name),\n createdAt: new Date(),\n source: this,\n creator: this.creator!,\n context: Object.assign({}, this.context, {}),\n trace: shallowCopy(this.trace), // TODO\n };\n }\n\n createSnapshot() {\n return {\n groupId: this.groupId,\n namespace: shallowCopy(this.namespace),\n creator: this.creator,\n context: this.context,\n trace: this.trace,\n listeners: Array.from(this.listeners).map(pick([\"raw\", \"options\", \"callback\"])),\n cleanups: this.cleanups,\n };\n }\n\n loadSnapshot({ listeners, ...snapshot }: ReturnType<typeof this.createSnapshot>): void {\n Object.assign(this, snapshot, { listeners: new Set() });\n listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/emitter/emitter.ts"],"names":["Emitter","Serializable","listeners","groupId","namespace","creator","context","trace","cleanups","input","Object","prototype","assertValidNamespace","register","root","create","child","slice","cleanup","pipe","push","target","on","toBoundedFunction","args","invoke","value","name","isBlocking","once","persistent","matchNested","destroy","length","forEach","reset","filter","listener","options","registerCallbacks","callbacks","entries","key","event","callback","match","matcher","createMatcher","matchers","path","createFullPath","RegExp","test","isPath","EmitterError","matchSameRun","runId","unshift","every","raw","priority","insertIndex","findIndex","l","splice","removeFromArray","emit","assertValidName","createEvent","data","executions","i","run","Promise","all","id","createRandomHash","createdAt","Date","source","assign","shallowCopy","createSnapshot","map","pick","loadSnapshot","snapshot"],"mappings":"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","file":"emitter.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Callback,\n CleanupFn,\n EmitterOptions,\n EventMeta,\n EventTrace,\n Matcher,\n MatcherFn,\n StringKey,\n} from \"@/emitter/types.js\";\nexport type { EventMeta, EventTrace, Callback };\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { createFullPath, isPath, assertValidName, assertValidNamespace } from \"@/emitter/utils.js\";\nimport { EmitterError } from \"@/emitter/errors.js\";\nimport { createRandomHash } from \"@/internals/helpers/hash.js\";\nimport { shallowCopy, toBoundedFunction } from \"@/serializer/utils.js\";\nimport { RequiredAll } from \"@/internals/types.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { pick } from \"remeda\";\nimport { removeFromArray } from \"@/internals/helpers/array.js\";\n\nexport interface EmitterInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\nexport interface EmitterChildInput<E extends object = object> {\n groupId?: string;\n namespace?: string[];\n creator?: object;\n context?: E & object;\n trace?: EventTrace;\n}\n\ninterface Listener<T = any> {\n readonly match: MatcherFn;\n readonly raw: Matcher;\n readonly callback: Callback<T>;\n readonly options?: EmitterOptions;\n}\n\nexport class Emitter<T = Record<keyof any, Callback<unknown>>> extends Serializable {\n protected listeners: Listener[] = [];\n protected readonly groupId?: string;\n public readonly namespace: string[];\n public readonly creator?: object;\n public readonly context: object;\n public readonly trace?: EventTrace;\n protected readonly cleanups: CleanupFn[] = [];\n\n constructor(input: EmitterInput = {}) {\n super();\n this.groupId = input?.groupId;\n this.namespace = input?.namespace ?? [];\n this.creator = input.creator ?? Object.prototype;\n this.context = input?.context ?? {};\n this.trace = input.trace;\n assertValidNamespace(this.namespace);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n static get root() {\n return new Emitter<Record<string, Callback<any>>>({ creator: Object.create(null) });\n }\n\n child<R = T>(input: EmitterChildInput = {}): Emitter<R> {\n const child = new Emitter<R>({\n trace: input.trace ?? this.trace,\n groupId: input?.groupId ?? this.groupId,\n context: { ...this.context, ...input?.context },\n creator: input?.creator ?? this.creator,\n namespace: input?.namespace\n ? [...this.namespace, ...input.namespace]\n : this.namespace.slice(),\n });\n\n const cleanup = child.pipe(this);\n this.cleanups.push(cleanup);\n\n return child;\n }\n\n pipe(target: Emitter<any>): CleanupFn {\n return this.on(\n // @ts-expect-error\n \"*.*\",\n toBoundedFunction(\n // @ts-expect-error\n (...args) => target.invoke(...args),\n [{ value: target, name: \"target\" }],\n ),\n {\n isBlocking: true,\n once: false,\n persistent: true,\n matchNested: false,\n },\n );\n }\n\n destroy() {\n this.listeners.length = 0;\n this.cleanups.forEach((child) => child());\n this.cleanups.length = 0;\n }\n\n reset() {\n this.listeners = this.listeners.filter((listener) => listener.options?.persistent);\n }\n\n registerCallbacks<K extends StringKey<RequiredAll<T>>>(\n callbacks: Partial<\n Record<K, NonNullable<T[K]> extends Callback<infer X> ? Callback<X> : never>\n >,\n options?: Partial<Record<K, EmitterOptions>>,\n ): CleanupFn {\n const listeners: CleanupFn[] = [];\n Object.entries(callbacks).forEach(([key, value]) => {\n if (value) {\n // @ts-expect-error\n listeners.push(this.on(key, value, options?.[key]));\n }\n });\n return () => listeners.forEach((cleanup) => cleanup());\n }\n\n on<K extends StringKey<RequiredAll<T>>>(\n event: K,\n callback: NonNullable<T[K]> extends Callback<any> ? T[K] : never,\n options?: EmitterOptions,\n ): CleanupFn {\n return this.match(event as Matcher, callback as Callback<any>, options);\n }\n\n match<L>(matcher: Matcher, callback: Callback<L>, options?: EmitterOptions): CleanupFn {\n const createMatcher = (): MatcherFn => {\n const matchers: MatcherFn[] = [];\n let matchNested = options?.matchNested;\n\n if (matcher === \"*\") {\n matchNested ??= false;\n matchers.push((event) => event.path === createFullPath(this.namespace, event.name));\n } else if (matcher === \"*.*\") {\n matchNested ??= true;\n matchers.push(() => true);\n } else if (matcher instanceof RegExp) {\n matchNested ??= true;\n matchers.push((event) => matcher.test(event.path));\n } else if (typeof matcher === \"function\") {\n matchNested ??= false;\n matchers.push(matcher);\n } else if (typeof matcher === \"string\") {\n if (isPath(matcher)) {\n matchNested ??= true;\n matchers.push((event) => event.path === matcher);\n } else {\n matchNested ??= false;\n matchers.push(\n (event) =>\n event.name === matcher && event.path === createFullPath(this.namespace, event.name),\n );\n }\n } else {\n throw new EmitterError(\"Invalid matcher provided!\");\n }\n\n if (!matchNested) {\n const matchSameRun = (event: EventMeta) => {\n // global observability x scoped observability\n return !this.trace?.runId ? true : this.trace?.runId === event.trace?.runId;\n };\n matchers.unshift(matchSameRun);\n }\n\n return (event) => matchers.every((matcher) => matcher(event));\n };\n\n const listener: Listener = {\n options,\n callback,\n raw: matcher,\n match: createMatcher(),\n };\n\n const priority = options?.priority ?? 0;\n const insertIndex = this.listeners.findIndex((l) => (l.options?.priority ?? 0) >= priority);\n if (insertIndex === -1) {\n this.listeners.push(listener);\n } else {\n this.listeners.splice(insertIndex, 0, listener);\n }\n\n return () => {\n removeFromArray(this.listeners, listener);\n };\n }\n\n async emit<K extends StringKey<RequiredAll<T>>>(\n name: K,\n value: NonNullable<T[K]> extends Callback<infer X> ? X : unknown,\n ): Promise<void> {\n assertValidName(name);\n\n const event = this.createEvent(name);\n return await this.invoke(value, event);\n }\n\n protected async invoke(data: unknown, event: EventMeta) {\n const executions: unknown[] = [];\n // Iterate in reverse to match Python's behavior (reversed list iteration)\n for (let i = this.listeners.length - 1; i >= 0; i--) {\n const listener = this.listeners[i];\n if (!listener.match(event)) {\n continue;\n }\n\n if (listener.options?.once) {\n this.listeners.splice(i, 1);\n }\n\n const run = async () => listener.callback(data, event);\n executions.push(listener.options?.isBlocking ? await run() : run());\n }\n await Promise.all(executions);\n }\n\n protected createEvent(name: string): EventMeta {\n return {\n id: createRandomHash(),\n groupId: this.groupId,\n name,\n path: createFullPath(this.namespace, name),\n createdAt: new Date(),\n source: this,\n creator: this.creator!,\n context: Object.assign({}, this.context, {}),\n trace: shallowCopy(this.trace), // TODO\n };\n }\n\n createSnapshot() {\n return {\n groupId: this.groupId,\n namespace: shallowCopy(this.namespace),\n creator: this.creator,\n context: this.context,\n trace: this.trace,\n listeners: this.listeners.map(pick([\"raw\", \"options\", \"callback\"])),\n cleanups: this.cleanups,\n };\n }\n\n loadSnapshot({ listeners, ...snapshot }: ReturnType<typeof this.createSnapshot>): void {\n Object.assign(this, snapshot, { listeners: [] });\n listeners.forEach(({ raw, callback, options }) => this.match(raw, callback, options));\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as Callback, E as Emitter, g as EmitterChildInput, f as EmitterInput,
|
|
1
|
+
export { C as Callback, E as Emitter, g as EmitterChildInput, f as EmitterInput, b as EventMeta, e as EventTrace } from '../emitter-jN55XZZq.cjs';
|
|
2
2
|
import '../internals/types.cjs';
|
|
3
3
|
import '../internals/serializable.cjs';
|
|
4
4
|
import '../internals/helpers/guards.cjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as Callback, E as Emitter, g as EmitterChildInput, f as EmitterInput,
|
|
1
|
+
export { C as Callback, E as Emitter, g as EmitterChildInput, f as EmitterInput, b as EventMeta, e as EventTrace } from '../emitter-36-9MnvA.js';
|
|
2
2
|
import '../internals/types.js';
|
|
3
3
|
import '../internals/serializable.js';
|
|
4
4
|
import '../internals/helpers/guards.js';
|