@anvia/core 1.0.3 → 1.0.7

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 (41) hide show
  1. package/README.md +61 -23
  2. package/dist/agent/index.d.ts +4 -4
  3. package/dist/agent/index.js +6 -5
  4. package/dist/{agent-DYfzP-n5.d.ts → agent-B-3jCRmI.d.ts} +2 -2
  5. package/dist/{chunk-OIB3URVG.js → chunk-2QZJTG2E.js} +2 -2
  6. package/dist/{chunk-AR2K73CJ.js → chunk-34EDX4ZL.js} +4 -83
  7. package/dist/chunk-34EDX4ZL.js.map +1 -0
  8. package/dist/{chunk-5TIXGU5U.js → chunk-HNRNTFMQ.js} +4 -4
  9. package/dist/chunk-KSKST3KP.js +86 -0
  10. package/dist/chunk-KSKST3KP.js.map +1 -0
  11. package/dist/{chunk-LZD36ZAP.js → chunk-XC3LVC4K.js} +5 -4
  12. package/dist/chunk-XC3LVC4K.js.map +1 -0
  13. package/dist/{chunk-4EWTDOLR.js → chunk-XEVOC433.js} +1 -157
  14. package/dist/chunk-XEVOC433.js.map +1 -0
  15. package/dist/{chunk-VSTJNHOZ.js → chunk-XSV5C4R5.js} +2 -2
  16. package/dist/documents/index.d.ts +1 -14
  17. package/dist/documents/index.js +3 -5
  18. package/dist/evals/index.d.ts +2 -2
  19. package/dist/index.d.ts +3 -3
  20. package/dist/index.js +7 -6
  21. package/dist/internal/agent.d.ts +3 -3
  22. package/dist/internal/agent.js +6 -5
  23. package/dist/internal/agent.js.map +1 -1
  24. package/dist/memory/index.d.ts +2 -2
  25. package/dist/observability/index.d.ts +2 -2
  26. package/dist/observability/index.js +2 -1
  27. package/dist/pipeline/index.d.ts +77 -4
  28. package/dist/pipeline/index.js +268 -27
  29. package/dist/pipeline/index.js.map +1 -1
  30. package/dist/skills/index.js +4 -4
  31. package/dist/tool/index.js +3 -3
  32. package/dist/{types-BUEZMBhO.d.ts → types-DL7wX6hJ.d.ts} +2 -1
  33. package/dist/{types-CSYt7-It.d.ts → types-DmzRCbU5.d.ts} +9 -1
  34. package/dist/vector-store/index.js +2 -2
  35. package/package.json +1 -10
  36. package/dist/chunk-4EWTDOLR.js.map +0 -1
  37. package/dist/chunk-AR2K73CJ.js.map +0 -1
  38. package/dist/chunk-LZD36ZAP.js.map +0 -1
  39. /package/dist/{chunk-OIB3URVG.js.map → chunk-2QZJTG2E.js.map} +0 -0
  40. /package/dist/{chunk-5TIXGU5U.js.map → chunk-HNRNTFMQ.js.map} +0 -0
  41. /package/dist/{chunk-VSTJNHOZ.js.map → chunk-XSV5C4R5.js.map} +0 -0
package/README.md CHANGED
@@ -20,6 +20,18 @@ adapter on the same release channel.
20
20
  pnpm add @anvia/core@rc
21
21
  ```
22
22
 
23
+ ### Bun
24
+
25
+ Bun 1.3.14 is the currently tested and supported runtime baseline. Install Core on the same
26
+ release channel as the rest of your Anvia packages:
27
+
28
+ ```sh
29
+ bun add @anvia/core@rc
30
+ ```
31
+
32
+ The repository itself remains a pnpm workspace; Bun support applies to applications consuming the
33
+ published package.
34
+
23
35
  See the repository's [1.0 release policy](../../docs/releases/v1.md) for channel and support
24
36
  details.
25
37
 
@@ -380,9 +392,11 @@ new Agent({
380
392
  Without `session`, the same Agent is stateless. Pass `{ messages }` when the caller already owns a
381
393
  complete transcript; transcripts cannot be combined with persisted sessions.
382
394
 
383
- Compaction is an explicit Agent policy over a store capability. The adapter persists the summary as
384
- an ordinary system message with `metadata.anvia.memoryCompaction`, so `load()` and inspectors expose
385
- exactly what future runs receive:
395
+ Compaction is an explicit Agent policy over a store capability. The store preserves the canonical
396
+ message history for `load()` and inspectors, and persists one latest compaction checkpoint
397
+ separately. Future model calls receive the checkpoint summary (a system message tagged with
398
+ `metadata.anvia.memoryCompaction`) plus the unsummarized tail, not the individual messages already
399
+ covered by that summary:
386
400
 
387
401
  ```ts
388
402
  import { createSummaryMemoryCompactor } from "@anvia/core/memory";
@@ -451,9 +465,10 @@ if (result.type === "compacted") {
451
465
  }
452
466
  ```
453
467
 
454
- The automatic trigger is a threshold, not a hard storage limit. Summary-provider retries belong to
455
- the compactor; full snapshot-to-replacement conflict retries are separately opt-in. A streamed
456
- `memory_compaction` event is emitted only after the store atomically commits the replacement.
468
+ The automatic trigger is a threshold, not a hard storage limit. Omitting `compaction` keeps the
469
+ full canonical history model-facing. Summary-provider retries belong to the compactor; full
470
+ snapshot-to-checkpoint conflict retries are separately opt-in. A streamed `memory_compaction`
471
+ event is emitted only after the store atomically commits the checkpoint.
457
472
 
458
473
  ## Structured Extraction
459
474
 
@@ -500,21 +515,51 @@ const { runId, output } = await pipeline.run({
500
515
  });
501
516
  ```
502
517
 
503
- ## Documents
518
+ Pipelines use the same named observability configuration as Agents. Pipeline observers receive the
519
+ root run and every composed, parallel, Agent, extraction, and custom stage. A primary stage trace is
520
+ propagated into an Agent stage so its generations and tools become children of that stage. This
521
+ requires the Pipeline and Agent `primaryTrace` names to match. When they differ, Anvia leaves the
522
+ Agent trace unchanged without raising an error:
504
523
 
505
- Applications own file discovery, file reads, source metadata, and per-file error policy. Core only
506
- provides deterministic in-memory chunking and scoped PDF text extraction:
524
+ ```ts
525
+ const pipeline = new Pipeline({
526
+ id: "support-flow",
527
+ inputSchema: z.string(),
528
+ observability: {
529
+ observers: { telemetry: pipelineObserver },
530
+ primaryTrace: "telemetry",
531
+ },
532
+ }).agent({
533
+ id: "draft",
534
+ agent,
535
+ suspension: "reject",
536
+ request: ({ input }) => ({ prompt: input }),
537
+ });
507
538
 
508
- PDF extraction uses the optional `pdfjs-dist` peer dependency. Install it in applications that call
509
- `extractPdfText`:
539
+ const result = await pipeline.run({
540
+ input: "Customer cannot complete checkout.",
541
+ trace: { sessionId: "support-session" },
542
+ });
510
543
 
511
- ```sh
512
- pnpm add pdfjs-dist
544
+ console.log(result.trace);
513
545
  ```
514
546
 
547
+ The `observer` passed to `pipeline.run()` remains a separate stage-event sink intended for Studio,
548
+ logging, and other operational consumers. Its errors are isolated unless `failOnObserverError` is
549
+ enabled.
550
+
551
+ `observability.errorPolicy` controls named observer failures instead. It accepts `"ignore"` or
552
+ `"throw"` and defaults to `"ignore"`. With `"throw"`, the run rejects with a
553
+ `PipelineObserverDispatchError` containing the failed phase and per-observer failures.
554
+
555
+ ## Documents
556
+
557
+ Applications own file discovery, file reads, document parsing, source metadata, and per-file error
558
+ policy. Core only provides deterministic in-memory text chunking:
559
+
515
560
  ```ts
516
561
  import { readFile } from "node:fs/promises";
517
- import { chunkText, extractPdfText } from "@anvia/core/documents";
562
+ import { chunkText } from "@anvia/core/documents";
518
563
 
519
564
  const text = await readFile("guide.txt", "utf8");
520
565
  const chunks = chunkText({
@@ -524,19 +569,12 @@ const chunks = chunkText({
524
569
  overlap: 100,
525
570
  separators: ["\n\n", "\n", " "],
526
571
  });
527
-
528
- const { pages } = await extractPdfText({
529
- data: new Uint8Array(await readFile("guide.pdf")),
530
- abortSignal,
531
- });
532
572
  ```
533
573
 
534
574
  Use `strategy: "fixed"` for deterministic sliding windows. Recursive chunking requires an explicit
535
575
  separator order and falls back to fixed-size splitting when none of those separators can divide an
536
576
  oversized section. Chunk offsets use JavaScript string indices and always identify the exact source
537
- slice. PDF pages are one-based, and the parser task is disposed before extraction settles.
538
- If parsing or abort handling fails together with parser cleanup, extraction rejects with an
539
- `AggregateError` containing the operation failure first and the cleanup failure second.
577
+ slice.
540
578
 
541
579
  For the common vector ingestion path, embed and upsert raw text with one call:
542
580
 
@@ -627,7 +665,7 @@ connection ownership, URL safety, and cleanup.
627
665
  - `skills`: local skill loading
628
666
  - `observability`: observer interfaces for runs, generations, and tool calls
629
667
  - `evals`: evaluation helpers and reporters
630
- - `documents`: in-memory text chunking and PDF text extraction
668
+ - `documents`: deterministic in-memory text chunking
631
669
  - `speech-generation`, `image-generation`, `transcription`: provider-neutral media interfaces
632
670
 
633
671
  ## Development
@@ -1,16 +1,16 @@
1
1
  export { M as ModelCallOptions } from '../model-call-options-CZkSw_xN.js';
2
2
  export { R as RetryContext, a as RetryOptions, b as RetrySetting } from '../retry-CjvSlKGW.js';
3
- export { A as Agent, a as AgentContextInput, b as AgentMemory, c as AgentMemoryOptions, d as AgentOptions, e as AgentToolInput, f as AgentToolOptions, C as CreateHybridVectorContextOptions, g as CreateVectorContextOptions, V as VectorContext, h as VectorContextBaseOptions, i as createVectorContext, j as isVectorContext } from '../agent-DYfzP-n5.js';
3
+ export { A as Agent, a as AgentContextInput, b as AgentMemory, c as AgentMemoryOptions, d as AgentOptions, e as AgentToolInput, f as AgentToolOptions, C as CreateHybridVectorContextOptions, g as CreateVectorContextOptions, V as VectorContext, h as VectorContextBaseOptions, i as createVectorContext, j as isVectorContext } from '../agent-B-3jCRmI.js';
4
4
  import { M as Message, U as Usage, C as CompletionFinishReason } from '../types-DgvozfPc.js';
5
- import { A as AgentBlockedOutcome, g as AgentInteractionOutcome } from '../types-BUEZMBhO.js';
6
- export { a as AgentChildStreamEvent, b as AgentDeltaEvent, c as AgentErrorEvent, d as AgentErrorStreamEvent, e as AgentFinishEvent, f as AgentInput, h as AgentLifecycle, i as AgentMemoryCompactionEvent, j as AgentMemoryCompactionOptions, k as AgentOutcome, l as AgentPrompt, m as AgentResponse, n as AgentRunOptions, o as AgentRunSettings, p as AgentStartEvent, q as AgentSteerInput, r as AgentSteerReceipt, s as AgentStepFinishEvent, t as AgentStream, u as AgentStreamEvent, v as AgentToolCallDeltaEvent, w as AgentToolFinishEvent, x as AgentToolStartEvent } from '../types-BUEZMBhO.js';
5
+ import { A as AgentBlockedOutcome, g as AgentInteractionOutcome } from '../types-DL7wX6hJ.js';
6
+ export { a as AgentChildStreamEvent, b as AgentDeltaEvent, c as AgentErrorEvent, d as AgentErrorStreamEvent, e as AgentFinishEvent, f as AgentInput, h as AgentLifecycle, i as AgentMemoryCompactionEvent, j as AgentMemoryCompactionOptions, k as AgentOutcome, l as AgentPrompt, m as AgentResponse, n as AgentRunOptions, o as AgentRunSettings, p as AgentStartEvent, q as AgentSteerInput, r as AgentSteerReceipt, s as AgentStepFinishEvent, t as AgentStream, u as AgentStreamEvent, v as AgentToolCallDeltaEvent, w as AgentToolFinishEvent, x as AgentToolStartEvent } from '../types-DL7wX6hJ.js';
7
7
  import '../zod-schema-C7F4clpm.js';
8
8
  import 'zod';
9
9
  import '../types-DhkodEft.js';
10
10
  import '../type-utils-CtHVDRn_.js';
11
11
  import '../types-DjqRHeAi.js';
12
12
  import '../tool-BpqpoRSE.js';
13
- import '../types-CSYt7-It.js';
13
+ import '../types-DmzRCbU5.js';
14
14
  import '../middleware-kcF8AusP.js';
15
15
  import './interactions/index.js';
16
16
  import '../types-DC1U1XwW.js';
@@ -2,15 +2,16 @@ import {
2
2
  Agent,
3
3
  createVectorContext,
4
4
  isVectorContext
5
- } from "../chunk-5TIXGU5U.js";
5
+ } from "../chunk-HNRNTFMQ.js";
6
6
  import "../chunk-OJBFDBLG.js";
7
7
  import "../chunk-J6LVLV6P.js";
8
8
  import "../chunk-XMVOBX43.js";
9
- import "../chunk-AR2K73CJ.js";
9
+ import "../chunk-34EDX4ZL.js";
10
+ import "../chunk-KSKST3KP.js";
10
11
  import "../chunk-YK4WAAS4.js";
11
- import "../chunk-OIB3URVG.js";
12
- import "../chunk-LZD36ZAP.js";
13
- import "../chunk-4EWTDOLR.js";
12
+ import "../chunk-2QZJTG2E.js";
13
+ import "../chunk-XC3LVC4K.js";
14
+ import "../chunk-XEVOC433.js";
14
15
  import {
15
16
  AgentRunBlockedError,
16
17
  AgentRunCancelledError,
@@ -3,8 +3,8 @@ import { D as Document, c as CompletionModel, P as ProviderTool, J as JsonObject
3
3
  import { Z as ZodSchema } from './zod-schema-C7F4clpm.js';
4
4
  import { d as GuardrailPolicyInput, c as GuardrailPolicy } from './types-DhkodEft.js';
5
5
  import { a as McpServer } from './types-DjqRHeAi.js';
6
- import { E as MemoryStore, z as MemorySavePolicy, F as MemoryTokenCounter, n as MemoryCompactor, d as MemoryCompactionConflictRetryOptions, y as MemoryOptions, k as MemoryCompactionResult } from './types-CSYt7-It.js';
7
- import { h as AgentLifecycle, F as AgentObservabilityOptions, n as AgentRunOptions, k as AgentOutcome, o as AgentRunSettings, t as AgentStream, j as AgentMemoryCompactionOptions } from './types-BUEZMBhO.js';
6
+ import { E as MemoryStore, z as MemorySavePolicy, F as MemoryTokenCounter, n as MemoryCompactor, d as MemoryCompactionConflictRetryOptions, y as MemoryOptions, k as MemoryCompactionResult } from './types-DmzRCbU5.js';
7
+ import { h as AgentLifecycle, F as AgentObservabilityOptions, n as AgentRunOptions, k as AgentOutcome, o as AgentRunSettings, t as AgentStream, j as AgentMemoryCompactionOptions } from './types-DL7wX6hJ.js';
8
8
  import { A as AgentMiddleware } from './middleware-kcF8AusP.js';
9
9
  import { A as AnyTool, T as Tool, c as ToolCallContext, N as NormalizedToolOutput } from './tool-BpqpoRSE.js';
10
10
  import { AgentContinuation, AgentInteractionResponse } from './agent/interactions/index.js';
@@ -4,7 +4,7 @@ import {
4
4
  assertPositiveSearchLimit,
5
5
  createTool,
6
6
  retrieveDocuments
7
- } from "./chunk-LZD36ZAP.js";
7
+ } from "./chunk-XC3LVC4K.js";
8
8
  import {
9
9
  embedDocuments
10
10
  } from "./chunk-K5L7R7XM.js";
@@ -168,4 +168,4 @@ export {
168
168
  createMiddleware,
169
169
  createThinkTool
170
170
  };
171
- //# sourceMappingURL=chunk-OIB3URVG.js.map
171
+ //# sourceMappingURL=chunk-2QZJTG2E.js.map
@@ -1,89 +1,10 @@
1
+ import {
2
+ observerSnapshot
3
+ } from "./chunk-KSKST3KP.js";
1
4
  import {
2
5
  Usage
3
6
  } from "./chunk-TB5EKZM7.js";
4
7
 
5
- // src/observability/snapshot.ts
6
- function observerSnapshot(value) {
7
- if (containsError(value, /* @__PURE__ */ new WeakSet())) {
8
- return cloneObserverFallback(value, /* @__PURE__ */ new WeakMap());
9
- }
10
- try {
11
- return globalThis.structuredClone(value);
12
- } catch {
13
- return cloneObserverFallback(value, /* @__PURE__ */ new WeakMap());
14
- }
15
- }
16
- function cloneObserverFallback(value, seen) {
17
- if (typeof value !== "object" || value === null) {
18
- return value;
19
- }
20
- const existing = seen.get(value);
21
- if (existing !== void 0) {
22
- return existing;
23
- }
24
- if (Array.isArray(value)) {
25
- const clone2 = [];
26
- seen.set(value, clone2);
27
- clone2.push(...value.map((item) => cloneObserverFallback(item, seen)));
28
- return clone2;
29
- }
30
- if (value instanceof Date) {
31
- return new Date(value.getTime());
32
- }
33
- if (value instanceof Error) {
34
- const clone2 = Object.create(Object.getPrototypeOf(value));
35
- seen.set(value, clone2);
36
- Object.defineProperties(clone2, {
37
- name: { configurable: true, writable: true, value: value.name },
38
- message: { configurable: true, writable: true, value: value.message }
39
- });
40
- if (value.stack !== void 0) {
41
- Object.defineProperty(clone2, "stack", {
42
- configurable: true,
43
- writable: true,
44
- value: value.stack
45
- });
46
- }
47
- if (value.cause !== void 0) {
48
- Object.defineProperty(clone2, "cause", {
49
- configurable: true,
50
- writable: true,
51
- value: cloneObserverFallback(value.cause, seen)
52
- });
53
- }
54
- for (const key of Object.getOwnPropertyNames(value)) {
55
- if (key === "name" || key === "message" || key === "stack" || key === "cause") continue;
56
- const descriptor = Object.getOwnPropertyDescriptor(value, key);
57
- if (descriptor === void 0) continue;
58
- if ("value" in descriptor) {
59
- descriptor.value = cloneObserverFallback(descriptor.value, seen);
60
- }
61
- Object.defineProperty(clone2, key, descriptor);
62
- }
63
- return clone2;
64
- }
65
- if (Object.getPrototypeOf(value) !== Object.prototype) {
66
- return value;
67
- }
68
- const clone = {};
69
- seen.set(value, clone);
70
- for (const [key, item] of Object.entries(value)) {
71
- clone[key] = cloneObserverFallback(item, seen);
72
- }
73
- return clone;
74
- }
75
- function containsError(value, seen) {
76
- if (typeof value !== "object" || value === null) return false;
77
- if (value instanceof Error) return true;
78
- if (seen.has(value)) return false;
79
- seen.add(value);
80
- if (Array.isArray(value)) {
81
- return value.some((item) => containsError(item, seen));
82
- }
83
- if (Object.getPrototypeOf(value) !== Object.prototype) return false;
84
- return Object.values(value).some((item) => containsError(item, seen));
85
- }
86
-
87
8
  // src/observability/group.ts
88
9
  var AgentObserverDispatchError = class extends AggregateError {
89
10
  phase;
@@ -321,4 +242,4 @@ export {
321
242
  AgentObserverDispatchError,
322
243
  startAgentRunObservers
323
244
  };
324
- //# sourceMappingURL=chunk-AR2K73CJ.js.map
245
+ //# sourceMappingURL=chunk-34EDX4ZL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/observability/group.ts"],"sourcesContent":["import { Usage } from \"../completion\";\nimport { observerSnapshot } from \"./snapshot\";\nimport type {\n AgentGenerationEndArgs,\n AgentGenerationErrorArgs,\n AgentGenerationObserver,\n AgentGenerationStartArgs,\n AgentGenerationUpdateArgs,\n AgentObserverErrorPolicy,\n AgentObserverMap,\n AgentRunEndArgs,\n AgentRunErrorArgs,\n AgentRunEventArgs,\n AgentRunObserver,\n AgentRunStartArgs,\n AgentToolEndArgs,\n AgentToolErrorArgs,\n AgentToolObserver,\n AgentToolStartArgs,\n AgentToolStreamEventArgs,\n AgentToolSuspendedArgs,\n AgentTraceInfo,\n} from \"./types\";\n\nexport type AgentObserverFailure = {\n readonly observer: string;\n readonly error: unknown;\n};\n\nexport class AgentObserverDispatchError extends AggregateError {\n readonly phase: string;\n readonly failures: readonly AgentObserverFailure[];\n\n constructor(phase: string, failures: readonly AgentObserverFailure[]) {\n super(\n failures.map((failure) => failure.error),\n `Agent observer ${phase} failed for ${failures.map((failure) => failure.observer).join(\", \")}.`,\n );\n this.name = \"AgentObserverDispatchError\";\n this.phase = phase;\n this.failures = Object.freeze([...failures]);\n }\n}\n\ntype NamedObserver<T> = {\n readonly name: string;\n readonly observer: T;\n};\n\ntype ActiveNamedObserver<T> = NamedObserver<T> & {\n terminal: boolean;\n};\n\nexport async function startAgentRunObservers(\n observers: AgentObserverMap,\n args: AgentRunStartArgs,\n options: {\n readonly primaryTrace?: string | undefined;\n readonly errorPolicy: AgentObserverErrorPolicy;\n },\n): Promise<ActiveAgentRunObservers> {\n const runObservers: ActiveNamedObserver<AgentRunObserver>[] = [];\n const failures: AgentObserverFailure[] = [];\n for (const [name, observer] of Object.entries(observers)) {\n try {\n const runObserver = await observer.startRun(observerSnapshot(args));\n if (runObserver !== undefined) {\n runObservers.push({ name, observer: runObserver, terminal: false });\n }\n } catch (error) {\n failures.push({ observer: name, error });\n }\n }\n if (options.errorPolicy === \"throw\" && failures.length > 0) {\n const startupError = new AgentObserverDispatchError(\"startRun\", failures);\n const cleanupFailures = await terminateObservers(runObservers, (observer) =>\n observer.error?.(\n observerSnapshot({\n status: \"failed\",\n error: startupError,\n usage: Usage.empty(),\n messages: [...args.history, args.prompt],\n }),\n ),\n );\n throw new AgentObserverDispatchError(\"startRun\", [...failures, ...cleanupFailures]);\n }\n return new ActiveAgentRunObservers(runObservers, options);\n}\n\nexport class ActiveAgentRunObservers {\n readonly trace: AgentTraceInfo | undefined;\n\n constructor(\n private readonly runObservers: readonly ActiveNamedObserver<AgentRunObserver>[],\n private readonly options: {\n readonly primaryTrace?: string | undefined;\n readonly errorPolicy: AgentObserverErrorPolicy;\n },\n ) {\n const primary =\n options.primaryTrace === undefined\n ? undefined\n : runObservers.find((entry) => entry.name === options.primaryTrace);\n this.trace =\n primary?.observer.trace === undefined\n ? undefined\n : Object.freeze({ observer: primary.name, ...primary.observer.trace });\n }\n\n async startGeneration(args: AgentGenerationStartArgs): Promise<ActiveGenerationObservers> {\n const generationObservers: ActiveNamedObserver<AgentGenerationObserver>[] = [];\n const failures: AgentObserverFailure[] = [];\n for (const entry of this.runObservers) {\n if (entry.observer.startGeneration === undefined) continue;\n try {\n const observer = await entry.observer.startGeneration(observerSnapshot(args));\n if (observer !== undefined) {\n generationObservers.push({ name: entry.name, observer, terminal: false });\n }\n } catch (error) {\n failures.push({ observer: entry.name, error });\n }\n }\n if (this.options.errorPolicy === \"throw\" && failures.length > 0) {\n const startupError = new AgentObserverDispatchError(\"startGeneration\", failures);\n const cleanupFailures = await terminateObservers(generationObservers, (observer) =>\n observer.error?.(observerSnapshot({ turn: args.turn, error: startupError })),\n );\n throw new AgentObserverDispatchError(\"startGeneration\", [...failures, ...cleanupFailures]);\n }\n return new ActiveGenerationObservers(generationObservers, this.options.errorPolicy);\n }\n\n async startTool(args: AgentToolStartArgs): Promise<ActiveToolObservers> {\n const toolObservers: ActiveNamedObserver<AgentToolObserver>[] = [];\n const failures: AgentObserverFailure[] = [];\n for (const entry of this.runObservers) {\n if (entry.observer.startTool === undefined) continue;\n try {\n const observer = await entry.observer.startTool(observerSnapshot(args));\n if (observer !== undefined) {\n toolObservers.push({ name: entry.name, observer, terminal: false });\n }\n } catch (error) {\n failures.push({ observer: entry.name, error });\n }\n }\n if (this.options.errorPolicy === \"throw\" && failures.length > 0) {\n const startupError = new AgentObserverDispatchError(\"startTool\", failures);\n const cleanupFailures = await terminateObservers(toolObservers, (observer) =>\n observer.error?.(observerSnapshot({ ...args, error: startupError })),\n );\n throw new AgentObserverDispatchError(\"startTool\", [...failures, ...cleanupFailures]);\n }\n return new ActiveToolObservers(toolObservers, this.options.errorPolicy);\n }\n\n async end(args: AgentRunEndArgs): Promise<void> {\n await dispatchTerminalObservers(\n this.runObservers,\n \"end\",\n (observer) => observer.end(observerSnapshot(args)),\n this.options.errorPolicy,\n );\n }\n\n async error(args: AgentRunErrorArgs): Promise<void> {\n await dispatchTerminalObservers(\n this.runObservers,\n \"error\",\n (observer) => observer.error?.(observerSnapshot(args)),\n \"ignore\",\n );\n }\n\n async event(args: AgentRunEventArgs): Promise<void> {\n await dispatchObservers(\n this.runObservers,\n \"event\",\n (observer) => observer.event?.(observerSnapshot(args)),\n this.options.errorPolicy,\n );\n }\n}\n\nexport class ActiveGenerationObservers {\n constructor(\n private readonly observers: readonly ActiveNamedObserver<AgentGenerationObserver>[],\n private readonly errorPolicy: AgentObserverErrorPolicy,\n ) {}\n\n async end(args: AgentGenerationEndArgs): Promise<void> {\n await dispatchTerminalObservers(\n this.observers,\n \"generation.end\",\n (observer) => observer.end(observerSnapshot(args)),\n this.errorPolicy,\n );\n }\n\n async error(args: AgentGenerationErrorArgs): Promise<void> {\n await dispatchTerminalObservers(\n this.observers,\n \"generation.error\",\n (observer) => observer.error?.(observerSnapshot(args)),\n \"ignore\",\n );\n }\n\n async update(args: AgentGenerationUpdateArgs): Promise<void> {\n await dispatchObservers(\n this.observers,\n \"generation.update\",\n (observer) => observer.update?.(observerSnapshot(args)),\n this.errorPolicy,\n );\n }\n}\n\nexport class ActiveToolObservers {\n constructor(\n private readonly observers: readonly ActiveNamedObserver<AgentToolObserver>[],\n private readonly errorPolicy: AgentObserverErrorPolicy,\n ) {}\n\n async streamEvent(args: AgentToolStreamEventArgs): Promise<void> {\n await dispatchObservers(\n this.observers,\n \"tool.streamEvent\",\n (observer) => observer.streamEvent?.(observerSnapshot(args)),\n this.errorPolicy,\n );\n }\n\n async end(args: AgentToolEndArgs): Promise<void> {\n await dispatchTerminalObservers(\n this.observers,\n \"tool.end\",\n (observer) => observer.end(observerSnapshot(args)),\n this.errorPolicy,\n );\n }\n\n async suspend(args: AgentToolSuspendedArgs): Promise<void> {\n await dispatchTerminalObservers(\n this.observers,\n \"tool.suspend\",\n (observer) => observer.suspend?.(observerSnapshot(args)),\n this.errorPolicy,\n );\n }\n\n async error(args: AgentToolErrorArgs): Promise<void> {\n await dispatchTerminalObservers(\n this.observers,\n \"tool.error\",\n (observer) => observer.error?.(observerSnapshot(args)),\n \"ignore\",\n );\n }\n}\n\nasync function dispatchObservers<T>(\n observers: readonly NamedObserver<T>[],\n phase: string,\n dispatch: (observer: T) => void | Promise<void> | undefined,\n errorPolicy: AgentObserverErrorPolicy,\n): Promise<void> {\n const failures: AgentObserverFailure[] = [];\n for (const entry of observers) {\n try {\n await dispatch(entry.observer);\n } catch (error) {\n failures.push({ observer: entry.name, error });\n }\n }\n throwObserverFailures(phase, failures, errorPolicy);\n}\n\nasync function dispatchTerminalObservers<T>(\n observers: readonly ActiveNamedObserver<T>[],\n phase: string,\n dispatch: (observer: T) => void | Promise<void> | undefined,\n errorPolicy: AgentObserverErrorPolicy,\n): Promise<void> {\n const failures = await terminateObservers(observers, dispatch);\n throwObserverFailures(phase, failures, errorPolicy);\n}\n\nasync function terminateObservers<T>(\n observers: readonly ActiveNamedObserver<T>[],\n dispatch: (observer: T) => void | Promise<void> | undefined,\n): Promise<AgentObserverFailure[]> {\n const failures: AgentObserverFailure[] = [];\n for (const entry of observers) {\n if (entry.terminal) continue;\n entry.terminal = true;\n try {\n await dispatch(entry.observer);\n } catch (error) {\n failures.push({ observer: entry.name, error });\n }\n }\n return failures;\n}\n\nfunction throwObserverFailures(\n phase: string,\n failures: readonly AgentObserverFailure[],\n errorPolicy: AgentObserverErrorPolicy,\n): void {\n if (errorPolicy === \"throw\" && failures.length > 0) {\n throw new AgentObserverDispatchError(phase, failures);\n }\n}\n"],"mappings":"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","names":[]}
@@ -16,14 +16,14 @@ import {
16
16
  } from "./chunk-XMVOBX43.js";
17
17
  import {
18
18
  startAgentRunObservers
19
- } from "./chunk-AR2K73CJ.js";
19
+ } from "./chunk-34EDX4ZL.js";
20
20
  import {
21
21
  isSkillTool
22
22
  } from "./chunk-YK4WAAS4.js";
23
23
  import {
24
24
  isQuestionTool,
25
25
  isToolIndex
26
- } from "./chunk-OIB3URVG.js";
26
+ } from "./chunk-2QZJTG2E.js";
27
27
  import {
28
28
  ToolNotFoundError,
29
29
  ToolOutput,
@@ -38,7 +38,7 @@ import {
38
38
  retrieveDocuments,
39
39
  toolMayRequireApproval,
40
40
  toolResultContentToText
41
- } from "./chunk-LZD36ZAP.js";
41
+ } from "./chunk-XC3LVC4K.js";
42
42
  import {
43
43
  AgentRunBlockedError,
44
44
  AgentRunCancelledError,
@@ -4772,4 +4772,4 @@ export {
4772
4772
  markResolvedAgentOptions,
4773
4773
  Agent
4774
4774
  };
4775
- //# sourceMappingURL=chunk-5TIXGU5U.js.map
4775
+ //# sourceMappingURL=chunk-HNRNTFMQ.js.map
@@ -0,0 +1,86 @@
1
+ // src/observability/snapshot.ts
2
+ function observerSnapshot(value) {
3
+ if (containsError(value, /* @__PURE__ */ new WeakSet())) {
4
+ return cloneObserverFallback(value, /* @__PURE__ */ new WeakMap());
5
+ }
6
+ try {
7
+ return globalThis.structuredClone(value);
8
+ } catch {
9
+ return cloneObserverFallback(value, /* @__PURE__ */ new WeakMap());
10
+ }
11
+ }
12
+ function cloneObserverFallback(value, seen) {
13
+ if (typeof value !== "object" || value === null) {
14
+ return value;
15
+ }
16
+ const existing = seen.get(value);
17
+ if (existing !== void 0) {
18
+ return existing;
19
+ }
20
+ if (Array.isArray(value)) {
21
+ const clone2 = [];
22
+ seen.set(value, clone2);
23
+ clone2.push(...value.map((item) => cloneObserverFallback(item, seen)));
24
+ return clone2;
25
+ }
26
+ if (value instanceof Date) {
27
+ return new Date(value.getTime());
28
+ }
29
+ if (value instanceof Error) {
30
+ const clone2 = Object.create(Object.getPrototypeOf(value));
31
+ seen.set(value, clone2);
32
+ Object.defineProperties(clone2, {
33
+ name: { configurable: true, writable: true, value: value.name },
34
+ message: { configurable: true, writable: true, value: value.message }
35
+ });
36
+ if (value.stack !== void 0) {
37
+ Object.defineProperty(clone2, "stack", {
38
+ configurable: true,
39
+ writable: true,
40
+ value: value.stack
41
+ });
42
+ }
43
+ if (value.cause !== void 0) {
44
+ Object.defineProperty(clone2, "cause", {
45
+ configurable: true,
46
+ writable: true,
47
+ value: cloneObserverFallback(value.cause, seen)
48
+ });
49
+ }
50
+ for (const key of Object.getOwnPropertyNames(value)) {
51
+ if (key === "name" || key === "message" || key === "stack" || key === "cause") continue;
52
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
53
+ if (descriptor === void 0) continue;
54
+ if ("value" in descriptor) {
55
+ descriptor.value = cloneObserverFallback(descriptor.value, seen);
56
+ }
57
+ Object.defineProperty(clone2, key, descriptor);
58
+ }
59
+ return clone2;
60
+ }
61
+ if (Object.getPrototypeOf(value) !== Object.prototype) {
62
+ return value;
63
+ }
64
+ const clone = {};
65
+ seen.set(value, clone);
66
+ for (const [key, item] of Object.entries(value)) {
67
+ clone[key] = cloneObserverFallback(item, seen);
68
+ }
69
+ return clone;
70
+ }
71
+ function containsError(value, seen) {
72
+ if (typeof value !== "object" || value === null) return false;
73
+ if (value instanceof Error) return true;
74
+ if (seen.has(value)) return false;
75
+ seen.add(value);
76
+ if (Array.isArray(value)) {
77
+ return value.some((item) => containsError(item, seen));
78
+ }
79
+ if (Object.getPrototypeOf(value) !== Object.prototype) return false;
80
+ return Object.values(value).some((item) => containsError(item, seen));
81
+ }
82
+
83
+ export {
84
+ observerSnapshot
85
+ };
86
+ //# sourceMappingURL=chunk-KSKST3KP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/observability/snapshot.ts"],"sourcesContent":["export function observerSnapshot<T>(value: T): T {\n if (containsError(value, new WeakSet<object>())) {\n return cloneObserverFallback(value, new WeakMap<object, object>());\n }\n try {\n return globalThis.structuredClone(value);\n } catch {\n return cloneObserverFallback(value, new WeakMap<object, object>());\n }\n}\n\nfunction cloneObserverFallback<T>(value: T, seen: WeakMap<object, object>): T {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n const existing = seen.get(value);\n if (existing !== undefined) {\n return existing as T;\n }\n if (Array.isArray(value)) {\n const clone: unknown[] = [];\n seen.set(value, clone);\n clone.push(...value.map((item) => cloneObserverFallback(item, seen)));\n return clone as T;\n }\n if (value instanceof Date) {\n return new Date(value.getTime()) as T;\n }\n if (value instanceof Error) {\n const clone = Object.create(Object.getPrototypeOf(value)) as Error;\n seen.set(value, clone);\n Object.defineProperties(clone, {\n name: { configurable: true, writable: true, value: value.name },\n message: { configurable: true, writable: true, value: value.message },\n });\n if (value.stack !== undefined) {\n Object.defineProperty(clone, \"stack\", {\n configurable: true,\n writable: true,\n value: value.stack,\n });\n }\n if (value.cause !== undefined) {\n Object.defineProperty(clone, \"cause\", {\n configurable: true,\n writable: true,\n value: cloneObserverFallback(value.cause, seen),\n });\n }\n for (const key of Object.getOwnPropertyNames(value)) {\n if (key === \"name\" || key === \"message\" || key === \"stack\" || key === \"cause\") continue;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor === undefined) continue;\n if (\"value\" in descriptor) {\n descriptor.value = cloneObserverFallback(descriptor.value, seen);\n }\n Object.defineProperty(clone, key, descriptor);\n }\n return clone as T;\n }\n if (Object.getPrototypeOf(value) !== Object.prototype) {\n return value;\n }\n const clone: Record<string, unknown> = {};\n seen.set(value, clone);\n for (const [key, item] of Object.entries(value)) {\n clone[key] = cloneObserverFallback(item, seen);\n }\n return clone as T;\n}\n\nfunction containsError(value: unknown, seen: WeakSet<object>): boolean {\n if (typeof value !== \"object\" || value === null) return false;\n if (value instanceof Error) return true;\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) {\n return value.some((item) => containsError(item, seen));\n }\n if (Object.getPrototypeOf(value) !== Object.prototype) return false;\n return Object.values(value).some((item) => containsError(item, seen));\n}\n"],"mappings":"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","names":["clone"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  chunkTextDocuments
3
- } from "./chunk-4EWTDOLR.js";
3
+ } from "./chunk-XEVOC433.js";
4
4
  import {
5
5
  cosineSimilarity,
6
6
  embedDocuments,
@@ -86,7 +86,7 @@ var ToolJsonError = class extends Error {
86
86
  };
87
87
 
88
88
  // src/tool/tool.ts
89
- var richToolOutput = /* @__PURE__ */ Symbol("anvia.tool-output.content");
89
+ var richToolOutput = /* @__PURE__ */ Symbol.for("anvia.tool-output.content");
90
90
  var ToolResultSerializationError = class extends TypeError {
91
91
  constructor(output) {
92
92
  super("Tool output must be a string, a strict JSON value, or ToolOutput.content(...).");
@@ -135,7 +135,8 @@ function toolResultContentToText(content) {
135
135
  return content.map((item) => item.type === "text" ? item.text : `[file:${item.mediaType}]`).join("\n");
136
136
  }
137
137
  function isRichToolOutput(value) {
138
- return typeof value === "object" && value !== null && richToolOutput in value;
138
+ if (typeof value !== "object" || value === null) return false;
139
+ return Object.getOwnPropertyDescriptor(value, richToolOutput)?.value === true;
139
140
  }
140
141
  function parseToolArgs(args) {
141
142
  const value = JSON.parse(args);
@@ -749,4 +750,4 @@ export {
749
750
  InMemoryVectorStore,
750
751
  createVectorSearchTool
751
752
  };
752
- //# sourceMappingURL=chunk-LZD36ZAP.js.map
753
+ //# sourceMappingURL=chunk-XC3LVC4K.js.map