@node-llm/core 1.9.0 → 1.11.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.
Files changed (52) hide show
  1. package/README.md +89 -6
  2. package/dist/agent/Agent.d.ts +191 -0
  3. package/dist/agent/Agent.d.ts.map +1 -0
  4. package/dist/agent/Agent.js +272 -0
  5. package/dist/aliases.d.ts +102 -9
  6. package/dist/aliases.d.ts.map +1 -1
  7. package/dist/aliases.js +102 -9
  8. package/dist/chat/Chat.d.ts +1 -0
  9. package/dist/chat/Chat.d.ts.map +1 -1
  10. package/dist/chat/Chat.js +184 -131
  11. package/dist/chat/ChatOptions.d.ts +2 -0
  12. package/dist/chat/ChatOptions.d.ts.map +1 -1
  13. package/dist/chat/ChatStream.d.ts.map +1 -1
  14. package/dist/chat/ChatStream.js +109 -66
  15. package/dist/chat/Tool.d.ts +43 -2
  16. package/dist/chat/Tool.d.ts.map +1 -1
  17. package/dist/chat/Tool.js +50 -0
  18. package/dist/chat/ToolHandler.d.ts +10 -5
  19. package/dist/chat/ToolHandler.d.ts.map +1 -1
  20. package/dist/chat/ToolHandler.js +10 -2
  21. package/dist/index.d.ts +5 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +3 -0
  24. package/dist/llm.d.ts +8 -1
  25. package/dist/llm.d.ts.map +1 -1
  26. package/dist/llm.js +156 -59
  27. package/dist/middlewares/CostGuardMiddleware.d.ts +24 -0
  28. package/dist/middlewares/CostGuardMiddleware.d.ts.map +1 -0
  29. package/dist/middlewares/CostGuardMiddleware.js +23 -0
  30. package/dist/middlewares/PIIMaskMiddleware.d.ts +23 -0
  31. package/dist/middlewares/PIIMaskMiddleware.d.ts.map +1 -0
  32. package/dist/middlewares/PIIMaskMiddleware.js +41 -0
  33. package/dist/middlewares/UsageLoggerMiddleware.d.ts +22 -0
  34. package/dist/middlewares/UsageLoggerMiddleware.d.ts.map +1 -0
  35. package/dist/middlewares/UsageLoggerMiddleware.js +30 -0
  36. package/dist/middlewares/index.d.ts +4 -0
  37. package/dist/middlewares/index.d.ts.map +1 -0
  38. package/dist/middlewares/index.js +3 -0
  39. package/dist/models/models.json +1458 -448
  40. package/dist/providers/BaseProvider.d.ts +6 -1
  41. package/dist/providers/BaseProvider.d.ts.map +1 -1
  42. package/dist/providers/BaseProvider.js +19 -0
  43. package/dist/providers/openai/OpenAIProvider.d.ts +1 -1
  44. package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
  45. package/dist/providers/openai/OpenAIProvider.js +13 -2
  46. package/dist/types/Middleware.d.ts +106 -0
  47. package/dist/types/Middleware.d.ts.map +1 -0
  48. package/dist/types/Middleware.js +1 -0
  49. package/dist/utils/middleware-runner.d.ts +7 -0
  50. package/dist/utils/middleware-runner.d.ts.map +1 -0
  51. package/dist/utils/middleware-runner.js +23 -0
  52. package/package.json +6 -2
@@ -13,7 +13,12 @@ export declare abstract class BaseProvider implements Provider {
13
13
  defaultModel(_feature?: string): string;
14
14
  protected throwUnsupportedError(feature: string): never;
15
15
  abstract chat(request: ChatRequest): Promise<ChatResponse>;
16
- abstract capabilities?: ProviderCapabilities;
16
+ capabilities?: ProviderCapabilities;
17
+ /**
18
+ * Provides a set of default capabilities where everything is disabled.
19
+ * Useful for custom providers to start with a safe baseline.
20
+ */
21
+ protected defaultCapabilities(): ProviderCapabilities;
17
22
  stream?(_request: ChatRequest): AsyncIterable<ChatChunk>;
18
23
  listModels?(): Promise<ModelInfo[]>;
19
24
  paint?(_request: ImageRequest): Promise<ImageResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseProvider.d.ts","sourceRoot":"","sources":["../../src/providers/BaseProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AACH,8BAAsB,YAAa,YAAW,QAAQ;aACpC,OAAO,IAAI,MAAM;aACjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,MAAM;IAEzC,IAAI,EAAE,IAAI,MAAM,CAEf;IAEM,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAI9C,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK;IAIvD,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1D,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAEtC,MAAM,CAAC,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC;IAKzD,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAInC,KAAK,CAAC,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAItD,UAAU,CAAC,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI3E,QAAQ,CAAC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInE,KAAK,CAAC,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpE,uBAAuB,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9B,OAAO;CAQX"}
1
+ {"version":3,"file":"BaseProvider.d.ts","sourceRoot":"","sources":["../../src/providers/BaseProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AACH,8BAAsB,YAAa,YAAW,QAAQ;aACpC,OAAO,IAAI,MAAM;aACjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,MAAM;IAEzC,IAAI,EAAE,IAAI,MAAM,CAEf;IAEM,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAI9C,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK;aAIvC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1D,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAE3C;;;OAGG;IACH,SAAS,CAAC,mBAAmB,IAAI,oBAAoB;IAe9C,MAAM,CAAC,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC;IAKzD,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAInC,KAAK,CAAC,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAItD,UAAU,CAAC,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI3E,QAAQ,CAAC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInE,KAAK,CAAC,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIpE,uBAAuB,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9B,OAAO;CAQX"}
@@ -14,6 +14,25 @@ export class BaseProvider {
14
14
  throwUnsupportedError(feature) {
15
15
  throw new UnsupportedFeatureError(this.providerName(), feature);
16
16
  }
17
+ capabilities;
18
+ /**
19
+ * Provides a set of default capabilities where everything is disabled.
20
+ * Useful for custom providers to start with a safe baseline.
21
+ */
22
+ defaultCapabilities() {
23
+ return {
24
+ supportsVision: () => false,
25
+ supportsTools: () => false,
26
+ supportsStructuredOutput: () => false,
27
+ supportsEmbeddings: () => false,
28
+ supportsImageGeneration: () => false,
29
+ supportsTranscription: () => false,
30
+ supportsModeration: () => false,
31
+ supportsReasoning: () => false,
32
+ supportsDeveloperRole: () => false,
33
+ getContextWindow: () => null
34
+ };
35
+ }
17
36
  async *stream(_request) {
18
37
  this.throwUnsupportedError("stream");
19
38
  yield* [];
@@ -37,7 +37,7 @@ export declare class OpenAIProvider extends BaseProvider implements Provider {
37
37
  apiBase(): string;
38
38
  headers(): Record<string, string>;
39
39
  protected providerName(): string;
40
- defaultModel(_feature?: string): string;
40
+ defaultModel(feature?: string): string;
41
41
  chat(request: ChatRequest): Promise<ChatResponse>;
42
42
  stream(request: ChatRequest): AsyncGenerator<ChatChunk>;
43
43
  listModels(): Promise<ModelInfo[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/OpenAIProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,QAAQ;IAwBtD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB;IAvB7D,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC;IAClC,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAC5C,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC;IACtC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;IACpD,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAC9C,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAErC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;yCACA,MAAM;kCAEb,MAAM;MAChC;gBAE6B,OAAO,EAAE,qBAAqB;IAYtD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIzE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIjE,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGnE"}
1
+ {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/OpenAIProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,QAAQ;IAwBtD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB;IAvB7D,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC;IAClC,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAC5C,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC;IACtC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;IACpD,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAC9C,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAErC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;yCACA,MAAM;kCAEb,MAAM;MAChC;gBAE6B,OAAO,EAAE,qBAAqB;IAYtD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAehD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIzE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIjE,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGnE"}
@@ -54,8 +54,19 @@ export class OpenAIProvider extends BaseProvider {
54
54
  providerName() {
55
55
  return "OpenAI";
56
56
  }
57
- defaultModel(_feature) {
58
- return "gpt-4o";
57
+ defaultModel(feature) {
58
+ switch (feature) {
59
+ case "embedding":
60
+ return "text-embedding-3-small";
61
+ case "transcription":
62
+ return "whisper-1";
63
+ case "moderation":
64
+ return "omni-moderation-latest";
65
+ case "image":
66
+ return "dall-e-3";
67
+ default:
68
+ return "gpt-4o";
69
+ }
59
70
  }
60
71
  async chat(request) {
61
72
  return this.chatHandler.execute(request);
@@ -0,0 +1,106 @@
1
+ import { Message } from "../chat/Message.js";
2
+ import { ChatOptions } from "../chat/ChatOptions.js";
3
+ import { ChatResponseString } from "../chat/ChatResponse.js";
4
+ import { ToolCall } from "../chat/Tool.js";
5
+ import { GeneratedImage } from "../image/GeneratedImage.js";
6
+ import { Transcription } from "../transcription/Transcription.js";
7
+ import { Moderation } from "../moderation/Moderation.js";
8
+ import { Embedding } from "../embedding/Embedding.js";
9
+ /**
10
+ * All possible response types that can be returned by NodeLLM.
11
+ */
12
+ export type NodeLLMResponse = ChatResponseString | GeneratedImage | Transcription | Moderation | Embedding;
13
+ /**
14
+ * Context passed to all middleware hooks.
15
+ * This object is shared across the lifecycle of a single request.
16
+ */
17
+ export interface MiddlewareContext {
18
+ /**
19
+ * Unique ID for tracing the request across the system.
20
+ */
21
+ requestId: string;
22
+ /**
23
+ * The provider being used (e.g., "openai", "anthropic").
24
+ */
25
+ provider: string;
26
+ /**
27
+ * The model identifier being used.
28
+ */
29
+ model: string;
30
+ /**
31
+ * The messages sent to the model (Chat only).
32
+ * Mutating this array in `onRequest` affects the actual call.
33
+ */
34
+ messages?: Message[];
35
+ /**
36
+ * Configuration options for the chat request (Chat only).
37
+ * Mutating this object in `onRequest` affects the actual call.
38
+ */
39
+ options?: ChatOptions;
40
+ /**
41
+ * Input text(s) for embeddings (Embedding only).
42
+ */
43
+ input?: string | string[];
44
+ /**
45
+ * Options passed to the embedding request (Embedding only).
46
+ */
47
+ embeddingOptions?: Record<string, unknown>;
48
+ /**
49
+ * Options passed to the transcription request (Transcription only).
50
+ */
51
+ transcriptionOptions?: Record<string, unknown>;
52
+ /**
53
+ * Options passed to the moderation request (Moderation only).
54
+ */
55
+ moderationOptions?: Record<string, unknown>;
56
+ /**
57
+ * Options passed to the image generation request (Paint only).
58
+ */
59
+ imageOptions?: Record<string, unknown>;
60
+ /**
61
+ * Shared state storage for passing data between middleware hooks.
62
+ * Example: Storing start time in `onRequest` and reading it in `onResponse`.
63
+ */
64
+ state: Record<string, unknown>;
65
+ }
66
+ /**
67
+ * Directives for handling tool execution errors.
68
+ */
69
+ export type ToolErrorDirective = "STOP" | "CONTINUE" | "RETRY" | void;
70
+ /**
71
+ * Middleware interface for hooking into the LLM execution lifecycle.
72
+ */
73
+ export interface Middleware {
74
+ /**
75
+ * Name of the middleware (useful for debugging).
76
+ */
77
+ name: string;
78
+ /**
79
+ * Called before the request is sent to the provider.
80
+ * Can allow modifying messages or options.
81
+ */
82
+ onRequest?(ctx: MiddlewareContext): Promise<void>;
83
+ /**
84
+ * Called after a successful response from the provider.
85
+ */
86
+ onResponse?(ctx: MiddlewareContext, result: NodeLLMResponse): Promise<void>;
87
+ /**
88
+ * Called if an error occurs during execution.
89
+ */
90
+ onError?(ctx: MiddlewareContext, error: Error): Promise<void>;
91
+ /**
92
+ * Called before a tool is executed.
93
+ * Throwing here will prevent the tool from running.
94
+ */
95
+ onToolCallStart?(ctx: MiddlewareContext, tool: ToolCall): Promise<void>;
96
+ /**
97
+ * Called after a tool completes successfully.
98
+ */
99
+ onToolCallEnd?(ctx: MiddlewareContext, tool: ToolCall, result: unknown): Promise<void>;
100
+ /**
101
+ * Called if a tool execution fails.
102
+ * Can return a directive to tell the engine how to proceed.
103
+ */
104
+ onToolCallError?(ctx: MiddlewareContext, tool: ToolCall, error: Error): Promise<ToolErrorDirective>;
105
+ }
106
+ //# sourceMappingURL=Middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Middleware.d.ts","sourceRoot":"","sources":["../../src/types/Middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,cAAc,GACd,aAAa,GACb,UAAU,GACV,SAAS,CAAC;AAEd;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3C;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/C;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE5C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,SAAS,CAAC,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD;;OAEG;IACH,UAAU,CAAC,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5E;;OAEG;IACH,OAAO,CAAC,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;OAGG;IACH,eAAe,CAAC,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;OAEG;IACH,aAAa,CAAC,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF;;;OAGG;IACH,eAAe,CAAC,CACd,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAChC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import { Middleware, MiddlewareContext } from "../types/Middleware.js";
2
+ /**
3
+ * Helper to execute middleware chains in order.
4
+ * @internal
5
+ */
6
+ export declare function runMiddleware<T = void>(middlewares: Middleware[], hookName: keyof Middleware, context: MiddlewareContext, ...args: any[]): Promise<T | undefined>;
7
+ //# sourceMappingURL=middleware-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-runner.d.ts","sourceRoot":"","sources":["../../src/utils/middleware-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEvE;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,GAAG,IAAI,EAC1C,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,MAAM,UAAU,EAC1B,OAAO,EAAE,iBAAiB,EAC1B,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAuBxB"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Helper to execute middleware chains in order.
3
+ * @internal
4
+ */
5
+ export async function runMiddleware(middlewares, hookName, context, ...args) {
6
+ if (!middlewares || middlewares.length === 0)
7
+ return undefined;
8
+ // Response and error hooks run in reverse order (stack model)
9
+ const isReverse = ["onResponse", "onError", "onToolCallEnd", "onToolCallError"].includes(hookName);
10
+ const chain = isReverse ? [...middlewares].reverse() : middlewares;
11
+ let finalResult;
12
+ for (const middleware of chain) {
13
+ if (typeof middleware[hookName] === "function") {
14
+ // @ts-ignore
15
+ const result = await middleware[hookName](context, ...args);
16
+ // Capture the first non-void result (for directives)
17
+ if (result !== undefined && finalResult === undefined) {
18
+ finalResult = result;
19
+ }
20
+ }
21
+ }
22
+ return finalResult;
23
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-llm/core",
3
- "version": "1.9.0",
3
+ "version": "1.11.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -11,6 +11,9 @@
11
11
  }
12
12
  },
13
13
  "description": "A provider-agnostic LLM core for Node.js, inspired by ruby-llm.",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
14
17
  "keywords": [
15
18
  "llm",
16
19
  "large-language-models",
@@ -40,7 +43,7 @@
40
43
  "url": "https://github.com/node-llm/node-llm",
41
44
  "directory": "packages/core"
42
45
  },
43
- "homepage": "https://node-llm.eshaiju.com",
46
+ "homepage": "https://nodellm.dev",
44
47
  "bugs": {
45
48
  "url": "https://github.com/node-llm/node-llm/issues"
46
49
  },
@@ -67,6 +70,7 @@
67
70
  "dev": "tsc -w",
68
71
  "lint": "tsc --noEmit",
69
72
  "test": "vitest run",
73
+ "test:docs": "vitest run test/docs",
70
74
  "test:watch": "vitest"
71
75
  }
72
76
  }