@anvia/core 0.2.3 → 0.3.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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agent/index.d.ts +6 -6
  3. package/dist/agent/index.js +5 -4
  4. package/dist/{agent-ufaeGoaz.d.ts → agent-D_jXqPAZ.d.ts} +6 -4
  5. package/dist/{chunk-4F7RVGFR.js → chunk-65QV627O.js} +44 -13
  6. package/dist/chunk-65QV627O.js.map +1 -0
  7. package/dist/{chunk-BKDDAOQH.js → chunk-6JCCM2K4.js} +2 -2
  8. package/dist/{chunk-T6GLJU5W.js → chunk-GSFQZYS7.js} +86 -17
  9. package/dist/chunk-GSFQZYS7.js.map +1 -0
  10. package/dist/chunk-I2HOMD3R.js +240 -0
  11. package/dist/chunk-I2HOMD3R.js.map +1 -0
  12. package/dist/{chunk-QKYU4L4V.js → chunk-QRZ2HPUX.js} +3 -3
  13. package/dist/{chunk-2VCWYCPV.js → chunk-TILE6Z2N.js} +2 -2
  14. package/dist/{chunk-OD6TY44B.js → chunk-ZSYIQYTV.js} +1 -1
  15. package/dist/chunk-ZSYIQYTV.js.map +1 -0
  16. package/dist/evals/index.d.ts +3 -3
  17. package/dist/evals/index.js +6 -8
  18. package/dist/extractor/index.d.ts +3 -3
  19. package/dist/extractor/index.js +5 -7
  20. package/dist/index.d.ts +5 -5
  21. package/dist/index.js +35 -31
  22. package/dist/mcp/index.d.ts +3 -3
  23. package/dist/{middleware-CKsY_zZE.d.ts → middleware-2FR89muX.d.ts} +5 -3
  24. package/dist/observability/index.d.ts +3 -2
  25. package/dist/observability/index.js +1 -1
  26. package/dist/pipeline/index.d.ts +3 -3
  27. package/dist/skills/index.d.ts +3 -3
  28. package/dist/skills/index.js +3 -5
  29. package/dist/tool/index.d.ts +10 -8
  30. package/dist/tool/index.js +17 -12
  31. package/dist/{tool-FEHplpd9.d.ts → tool-ClZYES-Z.d.ts} +9 -2
  32. package/dist/{types-CW3K1MJm.d.ts → types-B0iXLkqi.d.ts} +1 -1
  33. package/dist/{types-DpFoVF_g.d.ts → types-fLi8uM5R.d.ts} +1 -1
  34. package/dist/vector-store/index.d.ts +1 -1
  35. package/dist/vector-store/index.js +1 -2
  36. package/package.json +15 -7
  37. package/dist/chunk-3H7FVGHU.js +0 -113
  38. package/dist/chunk-3H7FVGHU.js.map +0 -1
  39. package/dist/chunk-445TT5Q5.js +0 -37
  40. package/dist/chunk-445TT5Q5.js.map +0 -1
  41. package/dist/chunk-4F7RVGFR.js.map +0 -1
  42. package/dist/chunk-OD6TY44B.js.map +0 -1
  43. package/dist/chunk-T6GLJU5W.js.map +0 -1
  44. package/dist/chunk-V5EETE3U.js +0 -106
  45. package/dist/chunk-V5EETE3U.js.map +0 -1
  46. /package/dist/{chunk-BKDDAOQH.js.map → chunk-6JCCM2K4.js.map} +0 -0
  47. /package/dist/{chunk-QKYU4L4V.js.map → chunk-QRZ2HPUX.js.map} +0 -0
  48. /package/dist/{chunk-2VCWYCPV.js.map → chunk-TILE6Z2N.js.map} +0 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Indra Zulfi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,13 +1,13 @@
1
1
  import { MemoryStore, MemoryOptions } from '../memory/index.js';
2
2
  export { MemoryAppendInput, MemoryContext, MemoryErrorInput, MemoryRegistration, MemorySavePolicy, ResolvedMemoryOptions, SessionOptions, resolveMemoryOptions } from '../memory/index.js';
3
- import { m as DynamicContextOptions, o as DynamicToolOptions, P as PromptHook, d as AgentEventStore, f as AgentEventStoreOptions, A as Agent } from '../agent-ufaeGoaz.js';
4
- export { a as AgentChildStreamEvent, b as AgentEventAppendInput, c as AgentEventRecord, e as AgentEventStoreInclude, g as AgentEventStoreRegistration, h as AgentOptions, i as AgentSession, j as AgentStreamEvent, k as AgentToolOptions, C as CompletionCallHookArgs, l as CompletionResponseHookArgs, D as DEFAULT_MAX_TURNS, n as DynamicContextRegistration, p as DynamicToolRegistration, H as HookAction, q as HookResult, r as PromptRequest, s as PromptResponse, R as RunControl, T as ToolApprovalRequestOptions, t as ToolCallControl, u as ToolCallHookAction, v as ToolCallHookArgs, w as ToolCallHookResult, x as ToolHookArgs, y as ToolResultHookArgs, z as cancelPrompt, B as createHook, E as requestToolApproval, F as runControl, G as skipTool, I as toolCallControl } from '../agent-ufaeGoaz.js';
3
+ import { m as DynamicContextOptions, o as DynamicToolOptions, P as PromptHook, d as AgentEventStore, f as AgentEventStoreOptions, A as Agent } from '../agent-D_jXqPAZ.js';
4
+ export { a as AgentChildStreamEvent, b as AgentEventAppendInput, c as AgentEventRecord, e as AgentEventStoreInclude, g as AgentEventStoreRegistration, h as AgentOptions, i as AgentSession, j as AgentStreamEvent, k as AgentToolOptions, C as CompletionCallHookArgs, l as CompletionResponseHookArgs, D as DEFAULT_MAX_TURNS, n as DynamicContextRegistration, p as DynamicToolRegistration, H as HookAction, q as HookResult, r as PromptRequest, s as PromptResponse, R as RunControl, T as ToolApprovalRequestOptions, t as ToolCallControl, u as ToolCallHookAction, v as ToolCallHookArgs, w as ToolCallHookResult, x as ToolHookArgs, y as ToolResultHookArgs, z as cancelPrompt, B as createHook, E as requestToolApproval, F as runControl, G as skipTool, I as toolCallControl } from '../agent-D_jXqPAZ.js';
5
5
  import { b as CompletionModel, j as JsonValue, o as ToolChoice, M as Message } from '../types-BM8-Y8Hy.js';
6
- import { c as McpServer } from '../types-DpFoVF_g.js';
6
+ import { c as McpServer } from '../types-fLi8uM5R.js';
7
7
  import { AgentObserver, ObserveOptions } from '../observability/index.js';
8
- import { b as ToolSearchDocument, c as ToolSet, T as ToolMiddleware, Z as ZodSchema } from '../middleware-CKsY_zZE.js';
9
- import { b as SkillSet } from '../types-CW3K1MJm.js';
10
- import { A as AnyTool } from '../tool-FEHplpd9.js';
8
+ import { b as ToolSearchDocument, c as ToolSet, T as ToolMiddleware, Z as ZodSchema } from '../middleware-2FR89muX.js';
9
+ import { b as SkillSet } from '../types-B0iXLkqi.js';
10
+ import { A as AnyTool } from '../tool-ClZYES-Z.js';
11
11
  import { VectorSearchIndex } from '../vector-store/index.js';
12
12
  import '@modelcontextprotocol/sdk/client/sse.js';
13
13
  import '@modelcontextprotocol/sdk/client/stdio.js';
@@ -12,15 +12,16 @@ import {
12
12
  runControl,
13
13
  skipTool,
14
14
  toolCallControl
15
- } from "../chunk-T6GLJU5W.js";
16
- import "../chunk-YK4WAAS4.js";
17
- import "../chunk-3H7FVGHU.js";
18
- import "../chunk-445TT5Q5.js";
15
+ } from "../chunk-GSFQZYS7.js";
19
16
  import {
20
17
  resolveMemoryOptions
21
18
  } from "../chunk-XXT2UCAR.js";
19
+ import "../chunk-YK4WAAS4.js";
20
+ import "../chunk-I2HOMD3R.js";
21
+ import "../chunk-65QV627O.js";
22
22
  import "../chunk-XUUY2L2D.js";
23
23
  import "../chunk-6GJDBBDC.js";
24
+ import "../chunk-A7VDIZQN.js";
24
25
  export {
25
26
  Agent,
26
27
  AgentBuilder,
@@ -1,8 +1,8 @@
1
- import { M as Message, e as CompletionResponse, b as CompletionModel, U as Usage, l as ReasoningContentType, n as ToolCall, D as Document, j as JsonValue, o as ToolChoice, J as JsonObject } from './types-BM8-Y8Hy.js';
1
+ import { M as Message, e as CompletionResponse, u as ToolResultContent, b as CompletionModel, U as Usage, l as ReasoningContentType, n as ToolCall, D as Document, j as JsonValue, o as ToolChoice, J as JsonObject } from './types-BM8-Y8Hy.js';
2
2
  import { MemoryContext, MemoryRegistration, SessionOptions } from './memory/index.js';
3
3
  import { AgentTraceOptions, AgentTraceInfo, AgentObserverRegistration } from './observability/index.js';
4
- import { T as ToolMiddleware, c as ToolSet, b as ToolSearchDocument } from './middleware-CKsY_zZE.js';
5
- import { T as Tool, A as AnyTool, d as ToolCallContext } from './tool-FEHplpd9.js';
4
+ import { T as ToolMiddleware, c as ToolSet, b as ToolSearchDocument } from './middleware-2FR89muX.js';
5
+ import { T as Tool, A as AnyTool, d as ToolCallContext, N as NormalizedToolOutput } from './tool-ClZYES-Z.js';
6
6
  import { VectorSearchIndex, VectorFilter, VectorSearchResult } from './vector-store/index.js';
7
7
 
8
8
  type HookAction = {
@@ -61,6 +61,7 @@ type ToolCallHookArgs = ToolHookArgs & {
61
61
  };
62
62
  type ToolResultHookArgs = ToolHookArgs & {
63
63
  result: string;
64
+ structuredResult?: ToolResultContent[] | undefined;
64
65
  run: RunControl;
65
66
  };
66
67
  declare function createHook<RawResponse = unknown>(hook: PromptHook<RawResponse>): PromptHook<RawResponse>;
@@ -110,6 +111,7 @@ type AgentChildStreamEvent<RawResponse = unknown> = {
110
111
  internalCallId: string;
111
112
  args: string;
112
113
  result: string;
114
+ structuredResult?: ToolResultContent[] | undefined;
113
115
  } | {
114
116
  type: "turn_end";
115
117
  turn: number;
@@ -283,7 +285,7 @@ declare class Agent<M extends CompletionModel = CompletionModel> {
283
285
  prompt: string;
284
286
  }, string>;
285
287
  getTool(toolName: string): AnyTool | undefined;
286
- callTool(toolName: string, args: string, context?: ToolCallContext): Promise<string>;
288
+ callTool(toolName: string, args: string, context?: ToolCallContext): Promise<NormalizedToolOutput>;
287
289
  shouldApplyToolMiddleware(toolName: string): boolean;
288
290
  }
289
291
  declare class AgentSession<M extends CompletionModel = CompletionModel> {
@@ -1,13 +1,42 @@
1
- import {
2
- createTool
3
- } from "./chunk-445TT5Q5.js";
4
1
  import {
5
2
  cosineSimilarity,
6
3
  embedText
7
4
  } from "./chunk-A7VDIZQN.js";
8
5
 
9
6
  // src/vector-store/index.ts
7
+ import { z as z2 } from "zod";
8
+
9
+ // src/schema/zod-schema.ts
10
10
  import { z } from "zod";
11
+ function toProviderJsonSchema(schema) {
12
+ const jsonSchema = z.toJSONSchema(schema);
13
+ const { $schema: _schema, ...providerSchema } = jsonSchema;
14
+ return providerSchema;
15
+ }
16
+
17
+ // src/tool/create-tool.ts
18
+ function createTool(options) {
19
+ const parameters = toProviderJsonSchema(options.input);
20
+ return {
21
+ name: options.name,
22
+ ...options.approval === void 0 ? {} : { approval: options.approval },
23
+ definition() {
24
+ return {
25
+ name: options.name,
26
+ description: options.description,
27
+ parameters
28
+ };
29
+ },
30
+ async call(args, context = {}) {
31
+ const parsedArgs = options.input.parse(args);
32
+ const result = await options.execute(parsedArgs, context);
33
+ return options.output === void 0 ? result : options.output.parse(result);
34
+ },
35
+ parseApprovalArgs(args) {
36
+ return options.input.parse(args);
37
+ }
38
+ };
39
+ }
11
40
 
12
41
  // src/vector-store/filter.ts
13
42
  var vectorFilter = {
@@ -234,16 +263,16 @@ function createVectorSearchTool(index, options) {
234
263
  return createTool({
235
264
  name: options.name,
236
265
  description: options.description ?? "Search a vector store for documents relevant to the provided query.",
237
- input: z.object({
238
- query: z.string().describe("The query string to search for relevant documents."),
239
- topK: z.number().int().positive().optional().describe("The maximum number of results.")
266
+ input: z2.object({
267
+ query: z2.string().describe("The query string to search for relevant documents."),
268
+ topK: z2.number().int().positive().optional().describe("The maximum number of results.")
240
269
  }),
241
- output: z.array(
242
- z.object({
243
- score: z.number(),
244
- id: z.string(),
245
- document: z.any(),
246
- metadata: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional()
270
+ output: z2.array(
271
+ z2.object({
272
+ score: z2.number(),
273
+ id: z2.string(),
274
+ document: z2.any(),
275
+ metadata: z2.record(z2.string(), z2.union([z2.string(), z2.number(), z2.boolean(), z2.null()])).optional()
247
276
  })
248
277
  ),
249
278
  execute: ({ query, topK }) => index.search({
@@ -264,9 +293,11 @@ function bestScore(queryEmbedding, embeddings) {
264
293
  }
265
294
 
266
295
  export {
296
+ toProviderJsonSchema,
297
+ createTool,
267
298
  vectorFilter,
268
299
  InMemoryVectorStore,
269
300
  InMemoryVectorIndex,
270
301
  createVectorSearchTool
271
302
  };
272
- //# sourceMappingURL=chunk-4F7RVGFR.js.map
303
+ //# sourceMappingURL=chunk-65QV627O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vector-store/index.ts","../src/schema/zod-schema.ts","../src/tool/create-tool.ts","../src/vector-store/filter.ts","../src/vector-store/lsh.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n cosineSimilarity,\n type EmbeddedDocument,\n type Embedding,\n type EmbeddingModel,\n embedText,\n type VectorMetadata,\n} from \"../embeddings\";\nimport { createTool } from \"../tool/create-tool\";\nimport type { Tool } from \"../tool/tool\";\nimport { matchesVectorFilter, type VectorFilter } from \"./filter\";\nimport { LshIndex, type LshOptions } from \"./lsh\";\n\nexport { type VectorFilter, vectorFilter } from \"./filter\";\n\nexport type IndexStrategy = { type: \"bruteForce\" } | LshOptions;\n\nexport type VectorSearchRequest = {\n query: string;\n topK: number;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type VectorSearchResult<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n score: number;\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n};\n\nexport type VectorInspectRequest = {\n limit: number;\n cursor?: string | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type VectorInspectItem<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n};\n\nexport type VectorInspectPage<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n items: Array<VectorInspectItem<T, Metadata>>;\n nextCursor?: string | undefined;\n totalCount?: number | undefined;\n};\n\nexport interface VectorSearchIndex<T = unknown, Metadata extends VectorMetadata = VectorMetadata> {\n search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>>;\n searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>>;\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown>;\n inspect?(request: VectorInspectRequest): Promise<VectorInspectPage<T, Metadata>>;\n}\n\nexport type VectorSearchToolOptions = {\n name: string;\n description?: string | undefined;\n topK?: number | undefined;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\n\ntype StoredDocument<T, Metadata extends VectorMetadata> = EmbeddedDocument<T, Metadata>;\n\nexport class InMemoryVectorStore<T, Metadata extends VectorMetadata = VectorMetadata> {\n private readonly documents = new Map<string, StoredDocument<T, Metadata>>();\n private indexStrategy: IndexStrategy;\n private lshIndex: LshIndex | undefined;\n\n constructor(options: { index?: IndexStrategy } = {}) {\n this.indexStrategy = options.index ?? { type: \"bruteForce\" };\n }\n\n static fromDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n documents: Array<EmbeddedDocument<T, Metadata>>,\n options: { index?: IndexStrategy } = {},\n ): InMemoryVectorStore<T, Metadata> {\n const store = new InMemoryVectorStore<T, Metadata>(options);\n store.addDocuments(documents);\n return store;\n }\n\n addDocuments(documents: Array<EmbeddedDocument<T, Metadata>>): this {\n for (const document of documents) {\n this.documents.set(document.id, document);\n }\n this.rebuildLshIndex();\n return this;\n }\n\n get(id: string): StoredDocument<T, Metadata> | undefined {\n return this.documents.get(id);\n }\n\n values(): Array<StoredDocument<T, Metadata>> {\n return [...this.documents.values()];\n }\n\n len(): number {\n return this.documents.size;\n }\n\n isEmpty(): boolean {\n return this.documents.size === 0;\n }\n\n index(model: EmbeddingModel): InMemoryVectorIndex<T, Metadata> {\n return new InMemoryVectorIndex(model, this);\n }\n\n candidates(queryEmbedding: Embedding): Array<StoredDocument<T, Metadata>> {\n if (this.indexStrategy.type !== \"lsh\" || this.lshIndex === undefined) {\n return this.values();\n }\n\n const candidateIds = this.lshIndex.query(queryEmbedding.vector);\n if (candidateIds.size === 0) {\n return this.values();\n }\n\n return [...candidateIds].flatMap((id) => {\n const document = this.documents.get(id);\n return document === undefined ? [] : [document];\n });\n }\n\n private rebuildLshIndex(): void {\n if (this.indexStrategy.type !== \"lsh\") {\n this.lshIndex = undefined;\n return;\n }\n\n const firstEmbedding = this.values().flatMap((document) => document.embeddings)[0];\n if (firstEmbedding === undefined) {\n this.lshIndex = undefined;\n return;\n }\n\n const index = new LshIndex(firstEmbedding.vector.length, this.indexStrategy);\n for (const document of this.documents.values()) {\n for (const embedding of document.embeddings) {\n index.insert(document.id, embedding.vector);\n }\n }\n this.lshIndex = index;\n }\n}\n\nexport class InMemoryVectorIndex<T, Metadata extends VectorMetadata = VectorMetadata>\n implements VectorSearchIndex<T, Metadata>\n{\n constructor(\n private readonly model: EmbeddingModel,\n private readonly store: InMemoryVectorStore<T, Metadata>,\n ) {}\n\n async search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>> {\n const queryEmbedding = await embedText(this.model, request.query);\n return this.store\n .candidates(queryEmbedding)\n .filter((document) => matchesVectorFilter(document.metadata, request.filter))\n .flatMap((document) => {\n const score = bestScore(queryEmbedding, document.embeddings);\n if (score === undefined) {\n return [];\n }\n if (request.threshold !== undefined && score < request.threshold) {\n return [];\n }\n return [\n {\n score,\n id: document.id,\n document: document.document,\n ...(document.metadata === undefined ? {} : { metadata: document.metadata }),\n },\n ];\n })\n .sort((left, right) => right.score - left.score)\n .slice(0, Math.max(0, Math.trunc(request.topK)));\n }\n\n async searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return (await this.search(request)).map(({ score, id }) => ({ score, id }));\n }\n\n async inspect(request: VectorInspectRequest): Promise<VectorInspectPage<T, Metadata>> {\n const limit = Math.max(0, Math.trunc(request.limit));\n const start = Math.max(0, Math.trunc(Number(request.cursor ?? \"0\")));\n const documents = this.store\n .values()\n .filter((document) => matchesVectorFilter(document.metadata, request.filter));\n const page = documents.slice(start, start + limit);\n const nextOffset = start + page.length;\n return {\n items: page.map((document) => ({\n id: document.id,\n document: document.document,\n ...(document.metadata === undefined ? {} : { metadata: document.metadata }),\n })),\n ...(nextOffset < documents.length ? { nextCursor: String(nextOffset) } : {}),\n totalCount: documents.length,\n };\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return createVectorSearchTool(this, options);\n }\n}\n\nexport function createVectorSearchTool<T, Metadata extends VectorMetadata>(\n index: VectorSearchIndex<T, Metadata>,\n options: VectorSearchToolOptions,\n): Tool<{ query: string; topK?: number }, Array<VectorSearchResult<T, Metadata>>> {\n return createTool({\n name: options.name,\n description:\n options.description ?? \"Search a vector store for documents relevant to the provided query.\",\n input: z.object({\n query: z.string().describe(\"The query string to search for relevant documents.\"),\n topK: z.number().int().positive().optional().describe(\"The maximum number of results.\"),\n }),\n output: z.array(\n z.object({\n score: z.number(),\n id: z.string(),\n document: z.any(),\n metadata: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()]))\n .optional(),\n }),\n ),\n execute: ({ query, topK }) =>\n index.search({\n query,\n topK: topK ?? options.topK ?? 5,\n threshold: options.threshold,\n filter: options.filter,\n }),\n }) as Tool<{ query: string; topK?: number }, Array<VectorSearchResult<T, Metadata>>>;\n}\n\nfunction bestScore(queryEmbedding: Embedding, embeddings: Embedding[]): number | undefined {\n let best: number | undefined;\n for (const embedding of embeddings) {\n const score = cosineSimilarity(queryEmbedding.vector, embedding.vector);\n best = best === undefined ? score : Math.max(best, score);\n }\n return best;\n}\n","import { z } from \"zod\";\nimport type { JsonObject } from \"../completion/index\";\n\nexport type ZodSchema<T = unknown> = z.ZodType<T>;\n\nexport function toProviderJsonSchema(schema: z.ZodType): JsonObject {\n const jsonSchema = z.toJSONSchema(schema) as JsonObject;\n const { $schema: _schema, ...providerSchema } = jsonSchema;\n return providerSchema;\n}\n","import type { z } from \"zod\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\nimport type { Tool, ToolApprovalPolicy, ToolCallContext } from \"./tool\";\n\nexport type CreateToolOptions<\n InputSchema extends ZodSchema,\n OutputSchema extends ZodSchema | undefined = undefined,\n Output = unknown,\n> = {\n name: string;\n description: string;\n input: InputSchema;\n output?: OutputSchema;\n approval?: ToolApprovalPolicy<z.output<InputSchema>>;\n execute(\n args: z.output<InputSchema>,\n context: ToolCallContext,\n ): OutputSchema extends ZodSchema\n ? z.input<OutputSchema> | Promise<z.input<OutputSchema>>\n : Output | Promise<Output>;\n};\n\ntype CreateToolOutput<\n OutputSchema extends ZodSchema | undefined,\n Output,\n> = OutputSchema extends ZodSchema ? z.output<OutputSchema> : Output;\n\nexport function createTool<InputSchema extends ZodSchema, Output = unknown>(\n options: CreateToolOptions<InputSchema, undefined, Output> & { output?: undefined },\n): Tool<z.output<InputSchema>, Output>;\n\nexport function createTool<InputSchema extends ZodSchema, OutputSchema extends ZodSchema>(\n options: CreateToolOptions<InputSchema, OutputSchema>,\n): Tool<z.output<InputSchema>, z.output<OutputSchema>>;\n\nexport function createTool<\n InputSchema extends ZodSchema,\n OutputSchema extends ZodSchema | undefined = undefined,\n Output = unknown,\n>(\n options: CreateToolOptions<InputSchema, OutputSchema, Output>,\n): Tool<z.output<InputSchema>, CreateToolOutput<OutputSchema, Output>> {\n const parameters = toProviderJsonSchema(options.input);\n\n return {\n name: options.name,\n ...(options.approval === undefined ? {} : { approval: options.approval }),\n definition() {\n return {\n name: options.name,\n description: options.description,\n parameters,\n };\n },\n async call(args, context = {}): Promise<CreateToolOutput<OutputSchema, Output>> {\n const parsedArgs = options.input.parse(args);\n const result = await options.execute(parsedArgs, context);\n return (\n options.output === undefined ? result : options.output.parse(result)\n ) as CreateToolOutput<OutputSchema, Output>;\n },\n parseApprovalArgs(args): z.output<InputSchema> {\n return options.input.parse(args);\n },\n };\n}\n","import type { VectorMetadata, VectorMetadataValue } from \"../embeddings\";\n\nexport type VectorFilter =\n | { type: \"eq\"; key: string; value: VectorMetadataValue }\n | { type: \"gt\"; key: string; value: VectorMetadataValue }\n | { type: \"lt\"; key: string; value: VectorMetadataValue }\n | { type: \"and\"; filters: [VectorFilter, VectorFilter] }\n | { type: \"or\"; filters: [VectorFilter, VectorFilter] };\n\nexport const vectorFilter = {\n eq(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"eq\", key, value };\n },\n gt(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"gt\", key, value };\n },\n lt(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"lt\", key, value };\n },\n and(left: VectorFilter, right: VectorFilter): VectorFilter {\n return { type: \"and\", filters: [left, right] };\n },\n or(left: VectorFilter, right: VectorFilter): VectorFilter {\n return { type: \"or\", filters: [left, right] };\n },\n};\n\nexport function matchesVectorFilter(\n metadata: VectorMetadata | undefined,\n filter: VectorFilter | undefined,\n): boolean {\n if (filter === undefined) {\n return true;\n }\n if (metadata === undefined) {\n return false;\n }\n\n switch (filter.type) {\n case \"eq\":\n return metadata[filter.key] === filter.value;\n case \"gt\":\n return compare(metadata[filter.key], filter.value) > 0;\n case \"lt\":\n return compare(metadata[filter.key], filter.value) < 0;\n case \"and\":\n return (\n matchesVectorFilter(metadata, filter.filters[0]) &&\n matchesVectorFilter(metadata, filter.filters[1])\n );\n case \"or\":\n return (\n matchesVectorFilter(metadata, filter.filters[0]) ||\n matchesVectorFilter(metadata, filter.filters[1])\n );\n }\n}\n\nfunction compare(left: VectorMetadataValue | undefined, right: VectorMetadataValue): number {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return left - right;\n }\n if (typeof left === \"string\" && typeof right === \"string\") {\n return left.localeCompare(right);\n }\n if (typeof left === \"boolean\" && typeof right === \"boolean\") {\n return Number(left) - Number(right);\n }\n return 0;\n}\n","export type LshOptions = {\n type: \"lsh\";\n numTables: number;\n numHyperplanes: number;\n seed?: number | undefined;\n};\n\nexport class LshIndex {\n private readonly hyperplanes: number[][];\n private readonly tables: Array<Map<string, Set<string>>>;\n\n constructor(\n dimensions: number,\n private readonly options: LshOptions,\n ) {\n const rng = seededRandom(options.seed ?? 42);\n this.hyperplanes = [];\n for (let index = 0; index < options.numTables * options.numHyperplanes; index += 1) {\n const plane = Array.from({ length: dimensions }, () => rng() * 2 - 1);\n const norm = Math.sqrt(plane.reduce((sum, value) => sum + value ** 2, 0));\n this.hyperplanes.push(norm === 0 ? plane : plane.map((value) => value / norm));\n }\n this.tables = Array.from({ length: options.numTables }, () => new Map());\n }\n\n insert(id: string, vector: number[]): void {\n for (let table = 0; table < this.options.numTables; table += 1) {\n const hash = this.hash(vector, table);\n const bucket = this.tables[table]?.get(hash) ?? new Set<string>();\n bucket.add(id);\n this.tables[table]?.set(hash, bucket);\n }\n }\n\n query(vector: number[]): Set<string> {\n const candidates = new Set<string>();\n for (let table = 0; table < this.options.numTables; table += 1) {\n const hash = this.hash(vector, table);\n for (const id of this.tables[table]?.get(hash) ?? []) {\n candidates.add(id);\n }\n }\n return candidates;\n }\n\n private hash(vector: number[], table: number): string {\n let hash = \"\";\n const start = table * this.options.numHyperplanes;\n for (let offset = 0; offset < this.options.numHyperplanes; offset += 1) {\n const plane = this.hyperplanes[start + offset] as number[];\n const dot = vector.reduce((sum, value, index) => sum + value * (plane[index] ?? 0), 0);\n hash += dot >= 0 ? \"1\" : \"0\";\n }\n return hash;\n }\n}\n\nfunction seededRandom(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 0x100000000;\n };\n}\n"],"mappings":"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","names":["z","z"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ExtractorBuilder
3
- } from "./chunk-QKYU4L4V.js";
3
+ } from "./chunk-QRZ2HPUX.js";
4
4
  import {
5
5
  cosineSimilarity,
6
6
  embedText
@@ -301,4 +301,4 @@ export {
301
301
  llmScore,
302
302
  agentEvalTarget
303
303
  };
304
- //# sourceMappingURL=chunk-BKDDAOQH.js.map
304
+ //# sourceMappingURL=chunk-6JCCM2K4.js.map
@@ -1,16 +1,17 @@
1
+ import {
2
+ resolveMemoryOptions
3
+ } from "./chunk-XXT2UCAR.js";
1
4
  import {
2
5
  isSkillTool
3
6
  } from "./chunk-YK4WAAS4.js";
4
7
  import {
5
- ToolSet
6
- } from "./chunk-3H7FVGHU.js";
8
+ ToolSet,
9
+ toolResultContentToText
10
+ } from "./chunk-I2HOMD3R.js";
7
11
  import {
8
12
  createTool,
9
13
  toProviderJsonSchema
10
- } from "./chunk-445TT5Q5.js";
11
- import {
12
- resolveMemoryOptions
13
- } from "./chunk-XXT2UCAR.js";
14
+ } from "./chunk-65QV627O.js";
14
15
  import {
15
16
  toReadableStream
16
17
  } from "./chunk-XUUY2L2D.js";
@@ -359,10 +360,11 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
359
360
  return void 0;
360
361
  }
361
362
  response() {
363
+ const accumulatedResponse = this.buildAccumulatedResponse();
362
364
  if (this.finalResponse !== void 0) {
363
365
  if (this.finalResponse.choice.length === 0) {
364
366
  const response = {
365
- ...this.buildAccumulatedResponse(),
367
+ ...accumulatedResponse,
366
368
  usage: this.finalResponse.usage,
367
369
  rawResponse: this.finalResponse.rawResponse
368
370
  };
@@ -371,9 +373,9 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
371
373
  }
372
374
  return response;
373
375
  }
374
- return this.finalResponse;
376
+ return this.mergeFinalResponse(accumulatedResponse, this.finalResponse);
375
377
  }
376
- return this.buildAccumulatedResponse();
378
+ return accumulatedResponse;
377
379
  }
378
380
  buildAccumulatedResponse() {
379
381
  const choice = [];
@@ -433,6 +435,38 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
433
435
  }
434
436
  this.toolCalls.set(toolCall.id, partial);
435
437
  }
438
+ mergeFinalResponse(accumulatedResponse, finalResponse) {
439
+ const accumulatedById = /* @__PURE__ */ new Map();
440
+ const accumulatedByCallId = /* @__PURE__ */ new Map();
441
+ for (const content of accumulatedResponse.choice) {
442
+ if (content.type !== "tool_call") {
443
+ continue;
444
+ }
445
+ accumulatedById.set(content.id, content);
446
+ if (content.callId !== void 0) {
447
+ accumulatedByCallId.set(content.callId, content);
448
+ }
449
+ }
450
+ return {
451
+ ...finalResponse,
452
+ choice: finalResponse.choice.map((content) => {
453
+ if (content.type !== "tool_call" || !isEmptyToolArguments(content.function.arguments)) {
454
+ return content;
455
+ }
456
+ const accumulated = accumulatedById.get(content.id) ?? (content.callId === void 0 ? void 0 : accumulatedByCallId.get(content.callId));
457
+ if (accumulated === void 0 || isEmptyToolArguments(accumulated.function.arguments)) {
458
+ return content;
459
+ }
460
+ return {
461
+ ...content,
462
+ function: {
463
+ ...content.function,
464
+ arguments: accumulated.function.arguments
465
+ }
466
+ };
467
+ })
468
+ };
469
+ }
436
470
  appendReasoning(reasoning, event) {
437
471
  const contentType = event.contentType ?? "text";
438
472
  if (contentType === "text" || contentType === "summary") {
@@ -478,6 +512,21 @@ function reasoningDeltaEvent(event) {
478
512
  if (event.signature !== void 0) mapped.signature = event.signature;
479
513
  return mapped;
480
514
  }
515
+ function isEmptyToolArguments(value) {
516
+ if (value === void 0 || value === null) {
517
+ return true;
518
+ }
519
+ if (typeof value === "string") {
520
+ return value.trim().length === 0;
521
+ }
522
+ if (Array.isArray(value)) {
523
+ return value.length === 0;
524
+ }
525
+ if (typeof value === "object") {
526
+ return Object.values(value).every((item) => item === void 0);
527
+ }
528
+ return false;
529
+ }
481
530
 
482
531
  // src/agent/request.ts
483
532
  var MCP_TOOL_METADATA_KEY = /* @__PURE__ */ Symbol.for("anvia.mcp.tool.metadata");
@@ -879,17 +928,27 @@ var PromptRequest = class _PromptRequest {
879
928
  output = error instanceof Error ? error.toString() : String(error);
880
929
  }
881
930
  }
931
+ let result = toolOutputToText(output);
932
+ let structuredResult = toolOutputToStructuredResult(output);
882
933
  if (this.agent.shouldApplyToolMiddleware(toolCall.function.name)) {
883
- output = await this.runToolResultMiddlewares({
934
+ const middlewareReplacement = await this.runToolResultMiddlewares({
884
935
  ...hookArgs,
885
- result: output,
886
- originalResult: output,
936
+ result,
937
+ originalResult: result,
938
+ structuredResult,
939
+ originalStructuredResult: structuredResult,
887
940
  turn: observation?.turn ?? 0
888
941
  });
942
+ if (middlewareReplacement !== void 0) {
943
+ output = middlewareReplacement;
944
+ result = middlewareReplacement;
945
+ structuredResult = void 0;
946
+ }
889
947
  }
890
948
  const resultAction = await this.activeHook?.onToolResult?.({
891
949
  ...hookArgs,
892
- result: output,
950
+ result,
951
+ structuredResult,
893
952
  run: runControl
894
953
  });
895
954
  await toolObservers?.end({
@@ -898,7 +957,8 @@ var PromptRequest = class _PromptRequest {
898
957
  toolName: toolCall.function.name,
899
958
  internalCallId,
900
959
  args,
901
- result: output,
960
+ result,
961
+ structuredResult,
902
962
  skipped,
903
963
  toolCallId: toolCall.callId
904
964
  });
@@ -910,7 +970,8 @@ var PromptRequest = class _PromptRequest {
910
970
  toolName: toolCall.function.name,
911
971
  internalCallId,
912
972
  args,
913
- result: output
973
+ result,
974
+ structuredResult
914
975
  };
915
976
  if (toolCall.callId !== void 0) {
916
977
  resultPayload.toolCallId = toolCall.callId;
@@ -921,6 +982,7 @@ var PromptRequest = class _PromptRequest {
921
982
  }
922
983
  async runToolResultMiddlewares(args) {
923
984
  let result = args.result;
985
+ let replaced = false;
924
986
  for (const middleware of [...this.agent.toolMiddlewares, ...this.requestToolMiddlewares]) {
925
987
  const replacement = await middleware.onResult?.({
926
988
  ...args,
@@ -928,9 +990,10 @@ var PromptRequest = class _PromptRequest {
928
990
  });
929
991
  if (replacement !== void 0) {
930
992
  result = replacement;
993
+ replaced = true;
931
994
  }
932
995
  }
933
- return result;
996
+ return replaced ? result : void 0;
934
997
  }
935
998
  async startRunObservers() {
936
999
  const failOnObserverError = this.traceOptions?.failOnObserverError === true || this.agent.observers.some((registration) => registration.failOnObserverError === true);
@@ -1155,6 +1218,12 @@ function normalizePromptInput(prompt) {
1155
1218
  history: prompt.slice(0, -1)
1156
1219
  };
1157
1220
  }
1221
+ function toolOutputToText(output) {
1222
+ return typeof output === "string" ? output : toolResultContentToText(output);
1223
+ }
1224
+ function toolOutputToStructuredResult(output) {
1225
+ return typeof output === "string" ? void 0 : output;
1226
+ }
1158
1227
  function agentToolEventPayload(toolCall, internalCallId, event) {
1159
1228
  if (typeof event.agentId !== "string" || event.agentId.length === 0) {
1160
1229
  return void 0;
@@ -1618,4 +1687,4 @@ export {
1618
1687
  AgentSession,
1619
1688
  AgentBuilder
1620
1689
  };
1621
- //# sourceMappingURL=chunk-T6GLJU5W.js.map
1690
+ //# sourceMappingURL=chunk-GSFQZYS7.js.map