eve 0.78.0 → 0.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/src/approval/definition.d.ts +42 -0
- package/dist/src/cli/commands/trace-detail.d.ts +2 -2
- package/dist/src/cli/commands/trace-detail.js +1 -1
- package/dist/src/cli/commands/trace.d.ts +1 -1
- package/dist/src/cli/commands/trace.js +1 -1
- package/dist/src/cli/dev/tui/traces/trace-conversation.d.ts +1 -1
- package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
- package/dist/src/cli/dev/tui/traces/trace-store.d.ts +1 -1
- package/dist/src/cli/dev/tui/traces/trace-store.js +1 -1
- package/dist/src/cli/dev/tui/traces/trace-view.d.ts +1 -1
- package/dist/src/cli/dev/tui/traces/trace-view.js +1 -1
- package/dist/src/cli/dev/tui/traces/trace-viewer-state.d.ts +1 -1
- package/dist/src/compiled/.vendor-stamp.json +3 -1
- package/dist/src/compiled/@eve/tracing/adapters/agent-transport.d.ts +8 -0
- package/dist/src/compiled/@eve/tracing/adapters/ai-sdk-payload.d.ts +15 -0
- package/dist/src/compiled/@eve/tracing/adapters/ai-sdk-telemetry.d.ts +14 -0
- package/dist/src/{tracing/agent-span-id-generator.d.ts → compiled/@eve/tracing/adapters/otel-ids.d.ts} +1 -1
- package/dist/src/compiled/@eve/tracing/adapters/otel.d.ts +33 -0
- package/dist/src/{tracing/agent-otel-content.d.ts → compiled/@eve/tracing/adapters/serialization.d.ts} +9 -3
- package/dist/src/compiled/@eve/tracing/agent-tracing.d.ts +84 -0
- package/dist/src/compiled/@eve/tracing/ai-sdk.d.ts +7 -0
- package/dist/src/compiled/@eve/tracing/ai-sdk.js +1 -0
- package/dist/src/compiled/@eve/tracing/capture.d.ts +5 -0
- package/dist/src/compiled/@eve/tracing/core/activation.d.ts +3 -0
- package/dist/src/compiled/@eve/tracing/core/attributes.d.ts +14 -0
- package/dist/src/{tracing/content-attributes.d.ts → compiled/@eve/tracing/core/content-policy.d.ts} +1 -1
- package/dist/src/compiled/@eve/tracing/core/context.d.ts +3 -0
- package/dist/src/compiled/@eve/tracing/core/delegation.d.ts +13 -0
- package/dist/src/compiled/@eve/tracing/core/mcp.d.ts +24 -0
- package/dist/src/compiled/@eve/tracing/core/scopes.d.ts +59 -0
- package/dist/src/compiled/@eve/tracing/core/snapshot.d.ts +7 -0
- package/dist/src/compiled/@eve/tracing/core/span-kinds.d.ts +12 -0
- package/dist/src/compiled/@eve/tracing/core/types.d.ts +292 -0
- package/dist/src/compiled/@eve/tracing/core/writer.d.ts +15 -0
- package/dist/src/compiled/@eve/tracing/delegation.d.ts +2 -0
- package/dist/src/compiled/@eve/tracing/delegation.js +1 -0
- package/dist/src/compiled/@eve/tracing/index.d.ts +6 -0
- package/dist/src/compiled/@eve/tracing/index.js +1 -0
- package/dist/src/compiled/@eve/tracing/operations.d.ts +96 -0
- package/dist/src/compiled/@eve/tracing/otel.d.ts +12 -0
- package/dist/src/compiled/@eve/tracing/otel.js +1 -0
- package/dist/src/compiled/@opentelemetry/api/index.d.ts +4 -0
- package/dist/src/compiled/@workflow/world-vercel/index.js +7 -7
- package/dist/src/compiled/_chunks/workflow/delegation-BqhZ398D.js +1 -0
- package/dist/src/compiled/_chunks/workflow/mcp-CrGp4EC8.js +5 -0
- package/dist/src/compiler/extension-compatibility.d.ts +6 -6
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/context/build-dynamic-tools.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/evals/assertions/collector.d.ts +4 -1
- package/dist/src/evals/assertions/collector.js +1 -1
- package/dist/src/evals/context.js +1 -1
- package/dist/src/evals/index.d.ts +1 -1
- package/dist/src/evals/runner/artifacts.js +1 -1
- package/dist/src/evals/runner/reporters/assertion-diagnostics.js +2 -2
- package/dist/src/evals/runner/reporters/assertion-scores.d.ts +11 -2
- package/dist/src/evals/runner/reporters/assertion-scores.js +1 -1
- package/dist/src/evals/runner/reporters/braintrust.js +1 -1
- package/dist/src/evals/runner/reporters/console.js +1 -1
- package/dist/src/evals/runner/reporters/datadog.js +2 -2
- package/dist/src/evals/runner/reporters/junit.js +1 -1
- package/dist/src/evals/runner/verdict.d.ts +2 -2
- package/dist/src/evals/runner/verdict.js +1 -1
- package/dist/src/evals/types.d.ts +22 -6
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/eve-channel/stream-headers.d.ts +1 -0
- package/dist/src/eve-channel/stream-headers.js +1 -0
- package/dist/src/execution/agent-sessions/context.d.ts +1 -1
- package/dist/src/execution/agent-sessions/context.js +1 -1
- package/dist/src/execution/agent-sessions/remote.js +1 -1
- package/dist/src/execution/agent-sessions/steps.js +1 -1
- package/dist/src/execution/cancelled-model-call-batch.js +1 -1
- package/dist/src/execution/catalog/connection-entry.js +1 -1
- package/dist/src/execution/dynamic-workflow/tool.js +1 -1
- package/dist/src/execution/eve-workflow-attributes.js +1 -1
- package/dist/src/execution/invoke-tool.d.ts +1 -1
- package/dist/src/execution/invoke-tool.js +1 -1
- package/dist/src/execution/session/turn-step.js +1 -1
- package/dist/src/execution/tools/agent-router-workflow.js +1 -1
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/harness/execute-tool.d.ts +2 -2
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
- package/dist/src/instrumentation/dispatch.js +1 -1
- package/dist/src/instrumentation/memory.d.ts +1 -4
- package/dist/src/instrumentation/memory.js +1 -1
- package/dist/src/instrumentation/principal-summary.js +1 -1
- package/dist/src/instrumentation/providers.js +1 -1
- package/dist/src/instrumentation/runtime-context.d.ts +1 -1
- package/dist/src/instrumentation/runtime.d.ts +3 -3
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/instrumentation/session-init.js +1 -1
- package/dist/src/internal/application/stamped-package-version.js +1 -1
- package/dist/src/internal/authored-definition/approval.d.ts +3 -1
- package/dist/src/internal/authored-definition/approval.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/logging.js +1 -1
- package/dist/src/internal/nitro/host/local-tracing-runtime-plugin.js +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/internal/nitro/routes/channel-request-instrumentation.d.ts +10 -31
- package/dist/src/internal/nitro/routes/channel-request-instrumentation.js +1 -1
- package/dist/src/internal/nitro/routes/route-invoke-tool.d.ts +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +1 -1
- package/dist/src/public/channels/slack/hitl.js +1 -1
- package/dist/src/public/definitions/approval.d.ts +1 -1
- package/dist/src/public/instrumentation/otel.d.ts +2 -2
- package/dist/src/public/instrumentation/otel.js +1 -1
- package/dist/src/public/tools/approval/index.d.ts +1 -1
- package/dist/src/runtime/connections/mcp-tracing.d.ts +10 -18
- package/dist/src/runtime/connections/mcp-tracing.js +1 -1
- package/dist/src/runtime/resolve-tool.js +1 -1
- package/dist/src/runtime/types.d.ts +2 -2
- package/dist/src/self-modification/extension/subagents/agent/tools/inspect_trace.d.ts +12 -12
- package/dist/src/self-modification/extension/subagents/agent/tools/inspect_trace.js +1 -1
- package/dist/src/self-modification/extension/subagents/agent/tools/search_traces.d.ts +1 -1
- package/dist/src/self-modification/extension/subagents/agent/tools/search_traces.js +1 -1
- package/dist/src/self-modification/extension/trace-inspection.d.ts +1 -1
- package/dist/src/self-modification/extension/trace-inspection.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/trace-policy.d.ts +3 -0
- package/dist/src/shared/trace-policy.js +1 -1
- package/dist/src/tools/definition.d.ts +3 -3
- package/dist/src/tools/durable-callbacks.d.ts +5 -3
- package/dist/src/tools/durable-callbacks.js +1 -1
- package/dist/src/tools/dynamic.d.ts +2 -2
- package/dist/src/tools/provided/ask-question-workflow.js +1 -1
- package/dist/src/tools/provided/sleep-workflow.js +1 -1
- package/dist/src/tools/workflow-definition.d.ts +2 -2
- package/dist/src/tracing/eve/agent-approval-instrumentation.d.ts +8 -0
- package/dist/src/tracing/eve/agent-approval-instrumentation.js +1 -0
- package/dist/src/tracing/{agent-channel-delivery-instrumentation.d.ts → eve/agent-channel-delivery-instrumentation.d.ts} +1 -1
- package/dist/src/tracing/{agent-channel-delivery-instrumentation.js → eve/agent-channel-delivery-instrumentation.js} +1 -1
- package/dist/src/tracing/eve/agent-invocation-coordinator.js +1 -0
- package/dist/src/tracing/eve/agent-memory-instrumentation.d.ts +12 -0
- package/dist/src/tracing/eve/agent-memory-instrumentation.js +1 -0
- package/dist/src/tracing/{agent-otel-provider.d.ts → eve/agent-otel-provider.d.ts} +6 -8
- package/dist/src/tracing/eve/agent-otel-provider.js +1 -0
- package/dist/src/tracing/eve/agent-tool-instrumentation.d.ts +44 -0
- package/dist/src/tracing/eve/agent-tool-instrumentation.js +1 -0
- package/dist/src/tracing/{agent-trace-context-store.d.ts → eve/agent-trace-context-store.d.ts} +8 -16
- package/dist/src/tracing/eve/agent-trace-context-store.js +1 -0
- package/dist/src/tracing/eve/agent-trace-context.js +1 -0
- package/dist/src/tracing/eve/agent-trace-state.d.ts +75 -0
- package/dist/src/tracing/{batch-span-processor.d.ts → eve/batch-span-processor.d.ts} +5 -1
- package/dist/src/tracing/eve/batch-span-processor.js +1 -0
- package/dist/src/tracing/{content-span-processor.d.ts → eve/content-span-processor.d.ts} +1 -1
- package/dist/src/tracing/eve/content-span-processor.js +1 -0
- package/dist/src/tracing/eve/delegation.d.ts +20 -0
- package/dist/src/tracing/eve/delegation.js +1 -0
- package/dist/src/tracing/eve/gateway.d.ts +16 -0
- package/dist/src/tracing/eve/gateway.js +1 -0
- package/dist/src/tracing/{install-instrumentation-runtime.d.ts → eve/install-instrumentation-runtime.d.ts} +1 -1
- package/dist/src/tracing/eve/install-instrumentation-runtime.js +1 -0
- package/dist/src/tracing/eve/invoke-tool-span.js +1 -0
- package/dist/src/tracing/eve/mcp.d.ts +29 -0
- package/dist/src/tracing/eve/mcp.js +1 -0
- package/dist/src/tracing/eve/metadata.d.ts +7 -0
- package/dist/src/tracing/eve/metadata.js +1 -0
- package/dist/src/tracing/eve/operation-input.d.ts +30 -0
- package/dist/src/tracing/eve/operation-input.js +1 -0
- package/dist/src/tracing/eve/otel-configuration.d.ts +70 -0
- package/dist/src/tracing/eve/otel-configuration.js +1 -0
- package/dist/src/tracing/{otel-declaration.d.ts → eve/otel-declaration.d.ts} +4 -11
- package/dist/src/tracing/eve/otel-declaration.js +1 -0
- package/dist/src/tracing/{otel-registration.d.ts → eve/otel-registration.d.ts} +12 -5
- package/dist/src/tracing/eve/otel-registration.js +1 -0
- package/dist/src/tracing/eve/policy.d.ts +15 -0
- package/dist/src/tracing/eve/policy.js +1 -0
- package/dist/src/tracing/eve/profile.d.ts +7 -0
- package/dist/src/tracing/eve/profile.js +1 -0
- package/dist/src/tracing/eve/session.d.ts +27 -0
- package/dist/src/tracing/eve/session.js +1 -0
- package/dist/src/tracing/{vercel-runtime-span-exporter.d.ts → eve/vercel-runtime-span-exporter.d.ts} +1 -1
- package/dist/src/tracing/local/agent-trace-span-processor.js +1 -0
- package/dist/src/tracing/local/inspection.d.ts +15 -0
- package/dist/src/tracing/local/inspection.js +1 -0
- package/dist/src/tracing/{local-instrumentation-runtime.d.ts → local/instrumentation-runtime.d.ts} +1 -1
- package/dist/src/tracing/local/instrumentation-runtime.js +1 -0
- package/dist/src/tracing/{local-trace-analysis.d.ts → local/trace-analysis.d.ts} +2 -2
- package/dist/src/tracing/{local-trace-analysis.js → local/trace-analysis.js} +1 -1
- package/dist/src/tracing/{local-trace-operations.d.ts → local/trace-operations.d.ts} +1 -1
- package/dist/src/tracing/{local-trace-query.d.ts → local/trace-query.d.ts} +1 -1
- package/dist/src/tracing/local/trace-reader.js +1 -0
- package/dist/src/tracing/{local-trace-retention.js → local/trace-retention.js} +1 -1
- package/dist/src/tracing/{local-trace-span-processor.js → local/trace-span-processor.js} +1 -1
- package/dist/src/tracing/{local-trace-summary.d.ts → local/trace-summary.d.ts} +1 -1
- package/dist/src/tracing/local/trace-summary.js +1 -0
- package/dist/src/tracing/{local-traces.d.ts → local/traces.d.ts} +1 -1
- package/dist/src/tracing/local/traces.js +1 -0
- package/docs/connections/mcp.mdx +22 -1
- package/docs/evals/assertions.mdx +50 -3
- package/docs/evals/overview.mdx +2 -1
- package/docs/evals/reporters.mdx +3 -1
- package/docs/tools/human-in-the-loop.md +23 -1
- package/package.json +2 -1
- package/dist/src/tracing/agent-approval-instrumentation.d.ts +0 -11
- package/dist/src/tracing/agent-approval-instrumentation.js +0 -1
- package/dist/src/tracing/agent-invocation-coordinator.js +0 -1
- package/dist/src/tracing/agent-memory-instrumentation.d.ts +0 -16
- package/dist/src/tracing/agent-memory-instrumentation.js +0 -1
- package/dist/src/tracing/agent-otel-attributes.d.ts +0 -10
- package/dist/src/tracing/agent-otel-attributes.js +0 -1
- package/dist/src/tracing/agent-otel-content.js +0 -4
- package/dist/src/tracing/agent-otel-provider.js +0 -2
- package/dist/src/tracing/agent-otel-runtime-context.d.ts +0 -36
- package/dist/src/tracing/agent-otel-runtime-context.js +0 -1
- package/dist/src/tracing/agent-otel-session-context.d.ts +0 -22
- package/dist/src/tracing/agent-otel-session-context.js +0 -1
- package/dist/src/tracing/agent-otel-turn-state.d.ts +0 -6
- package/dist/src/tracing/agent-otel-turn-state.js +0 -1
- package/dist/src/tracing/agent-otel-usage.d.ts +0 -10
- package/dist/src/tracing/agent-otel-usage.js +0 -1
- package/dist/src/tracing/agent-span-contract.d.ts +0 -34
- package/dist/src/tracing/agent-span-contract.js +0 -1
- package/dist/src/tracing/agent-span-error.js +0 -1
- package/dist/src/tracing/agent-span-id-generator.js +0 -1
- package/dist/src/tracing/agent-span-naming.d.ts +0 -1
- package/dist/src/tracing/agent-span-naming.js +0 -1
- package/dist/src/tracing/agent-tool-instrumentation.d.ts +0 -40
- package/dist/src/tracing/agent-tool-instrumentation.js +0 -1
- package/dist/src/tracing/agent-tool-span-context.d.ts +0 -16
- package/dist/src/tracing/agent-tool-span-context.js +0 -1
- package/dist/src/tracing/agent-trace-context-codec.d.ts +0 -15
- package/dist/src/tracing/agent-trace-context-codec.js +0 -1
- package/dist/src/tracing/agent-trace-context-store.js +0 -1
- package/dist/src/tracing/agent-trace-context.js +0 -1
- package/dist/src/tracing/agent-trace-span-processor.js +0 -1
- package/dist/src/tracing/agent-trace-state.d.ts +0 -91
- package/dist/src/tracing/batch-span-processor.js +0 -1
- package/dist/src/tracing/bounded-error.d.ts +0 -1
- package/dist/src/tracing/bounded-error.js +0 -1
- package/dist/src/tracing/content-attributes.js +0 -1
- package/dist/src/tracing/content-span-processor.js +0 -1
- package/dist/src/tracing/error-content-context.d.ts +0 -3
- package/dist/src/tracing/error-content-context.js +0 -1
- package/dist/src/tracing/install-instrumentation-runtime.js +0 -1
- package/dist/src/tracing/invoke-tool-span.js +0 -1
- package/dist/src/tracing/local-instrumentation-runtime.js +0 -1
- package/dist/src/tracing/local-trace-reader.js +0 -1
- package/dist/src/tracing/local-trace-summary.js +0 -1
- package/dist/src/tracing/local-traces.js +0 -1
- package/dist/src/tracing/otel-declaration.js +0 -1
- package/dist/src/tracing/otel-registration.js +0 -1
- package/dist/src/tracing/sampled-trace.d.ts +0 -4
- package/dist/src/tracing/sampled-trace.js +0 -1
- package/dist/src/tracing/suppress-tracing.d.ts +0 -2
- package/dist/src/tracing/suppress-tracing.js +0 -1
- package/dist/src/tracing/telemetry-budget.d.ts +0 -3
- package/dist/src/tracing/telemetry-budget.js +0 -1
- /package/dist/src/{tracing/agent-span-error.d.ts → compiled/@eve/tracing/adapters/otel-error.d.ts} +0 -0
- /package/dist/src/tracing/{agent-invocation-coordinator.d.ts → eve/agent-invocation-coordinator.d.ts} +0 -0
- /package/dist/src/tracing/{agent-trace-context.d.ts → eve/agent-trace-context.d.ts} +0 -0
- /package/dist/src/tracing/{agent-trace-state.js → eve/agent-trace-state.js} +0 -0
- /package/dist/src/tracing/{channel-audience-context.d.ts → eve/channel-audience-context.d.ts} +0 -0
- /package/dist/src/tracing/{channel-audience-context.js → eve/channel-audience-context.js} +0 -0
- /package/dist/src/tracing/{conversation-context.d.ts → eve/conversation-context.d.ts} +0 -0
- /package/dist/src/tracing/{conversation-context.js → eve/conversation-context.js} +0 -0
- /package/dist/src/tracing/{invoke-tool-span.d.ts → eve/invoke-tool-span.d.ts} +0 -0
- /package/dist/src/tracing/{span-export-policy.d.ts → eve/span-export-policy.d.ts} +0 -0
- /package/dist/src/tracing/{span-export-policy.js → eve/span-export-policy.js} +0 -0
- /package/dist/src/tracing/{vercel-runtime-span-exporter.js → eve/vercel-runtime-span-exporter.js} +0 -0
- /package/dist/src/tracing/{agent-trace-span-processor.d.ts → local/agent-trace-span-processor.d.ts} +0 -0
- /package/dist/src/tracing/{local-trace-discovery-index.d.ts → local/trace-discovery-index.d.ts} +0 -0
- /package/dist/src/tracing/{local-trace-discovery-index.js → local/trace-discovery-index.js} +0 -0
- /package/dist/src/tracing/{local-trace-operations.js → local/trace-operations.js} +0 -0
- /package/dist/src/tracing/{local-trace-query.js → local/trace-query.js} +0 -0
- /package/dist/src/tracing/{local-trace-reader.d.ts → local/trace-reader.d.ts} +0 -0
- /package/dist/src/tracing/{local-trace-retention.d.ts → local/trace-retention.d.ts} +0 -0
- /package/dist/src/tracing/{local-trace-span-processor.d.ts → local/trace-span-processor.d.ts} +0 -0
|
@@ -18,14 +18,14 @@ export declare function resolveInspectTraceTool(config: ResolvedSelfModification
|
|
|
18
18
|
startOffsetMs: number;
|
|
19
19
|
toolName?: string;
|
|
20
20
|
turnId?: string;
|
|
21
|
-
usage?: import("#tracing/local
|
|
21
|
+
usage?: import("#tracing/local/trace-analysis.js").TraceTokenUsage;
|
|
22
22
|
availableFields: ("arguments" | "error" | "result")[];
|
|
23
23
|
argumentsPreview?: string | undefined;
|
|
24
24
|
}[];
|
|
25
|
-
summary: import("../../../../../tracing/local
|
|
25
|
+
summary: import("../../../../../tracing/local/trace-summary.ts").LocalTraceSummary;
|
|
26
26
|
modelWorkMs: number;
|
|
27
27
|
toolWorkMs: number;
|
|
28
|
-
groups: readonly import("#tracing/local
|
|
28
|
+
groups: readonly import("#tracing/local/trace-analysis.js").TraceAnalysisGroup[];
|
|
29
29
|
total: number;
|
|
30
30
|
hasMore: boolean;
|
|
31
31
|
truncated: boolean;
|
|
@@ -49,14 +49,14 @@ export declare function resolveInspectTraceTool(config: ResolvedSelfModification
|
|
|
49
49
|
startOffsetMs: number;
|
|
50
50
|
toolName?: string;
|
|
51
51
|
turnId?: string;
|
|
52
|
-
usage?: import("#tracing/local
|
|
52
|
+
usage?: import("#tracing/local/trace-analysis.js").TraceTokenUsage;
|
|
53
53
|
availableFields: ("arguments" | "error" | "result")[];
|
|
54
54
|
argumentsPreview?: string | undefined;
|
|
55
55
|
}[];
|
|
56
|
-
summary: import("../../../../../tracing/local
|
|
56
|
+
summary: import("../../../../../tracing/local/trace-summary.ts").LocalTraceSummary;
|
|
57
57
|
modelWorkMs: number;
|
|
58
58
|
toolWorkMs: number;
|
|
59
|
-
groups: readonly import("#tracing/local
|
|
59
|
+
groups: readonly import("#tracing/local/trace-analysis.js").TraceAnalysisGroup[];
|
|
60
60
|
total: number;
|
|
61
61
|
hasMore: boolean;
|
|
62
62
|
truncated: boolean;
|
|
@@ -81,14 +81,14 @@ declare const _default: import("eve/tools").DynamicSentinel<(import("eve/tools")
|
|
|
81
81
|
startOffsetMs: number;
|
|
82
82
|
toolName?: string;
|
|
83
83
|
turnId?: string;
|
|
84
|
-
usage?: import("#tracing/local
|
|
84
|
+
usage?: import("#tracing/local/trace-analysis.js").TraceTokenUsage;
|
|
85
85
|
availableFields: ("arguments" | "error" | "result")[];
|
|
86
86
|
argumentsPreview?: string | undefined;
|
|
87
87
|
}[];
|
|
88
|
-
summary: import("../../../../../tracing/local
|
|
88
|
+
summary: import("../../../../../tracing/local/trace-summary.ts").LocalTraceSummary;
|
|
89
89
|
modelWorkMs: number;
|
|
90
90
|
toolWorkMs: number;
|
|
91
|
-
groups: readonly import("#tracing/local
|
|
91
|
+
groups: readonly import("#tracing/local/trace-analysis.js").TraceAnalysisGroup[];
|
|
92
92
|
total: number;
|
|
93
93
|
hasMore: boolean;
|
|
94
94
|
truncated: boolean;
|
|
@@ -112,14 +112,14 @@ declare const _default: import("eve/tools").DynamicSentinel<(import("eve/tools")
|
|
|
112
112
|
startOffsetMs: number;
|
|
113
113
|
toolName?: string;
|
|
114
114
|
turnId?: string;
|
|
115
|
-
usage?: import("#tracing/local
|
|
115
|
+
usage?: import("#tracing/local/trace-analysis.js").TraceTokenUsage;
|
|
116
116
|
availableFields: ("arguments" | "error" | "result")[];
|
|
117
117
|
argumentsPreview?: string | undefined;
|
|
118
118
|
}[];
|
|
119
|
-
summary: import("../../../../../tracing/local
|
|
119
|
+
summary: import("../../../../../tracing/local/trace-summary.ts").LocalTraceSummary;
|
|
120
120
|
modelWorkMs: number;
|
|
121
121
|
toolWorkMs: number;
|
|
122
|
-
groups: readonly import("#tracing/local
|
|
122
|
+
groups: readonly import("#tracing/local/trace-analysis.js").TraceAnalysisGroup[];
|
|
123
123
|
total: number;
|
|
124
124
|
hasMore: boolean;
|
|
125
125
|
truncated: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineLocalOnlyDynamic,resolveLocalOnly}from"../../../local-only.js";import{TRACE_ID,boundedText,detailFields,readTraceSources}from"../../../trace-inspection.js";import{defineTool}from"eve/tools";import{analyzeLocalTrace}from"#tracing/local
|
|
1
|
+
import{defineLocalOnlyDynamic,resolveLocalOnly}from"../../../local-only.js";import{TRACE_ID,boundedText,detailFields,readTraceSources}from"../../../trace-inspection.js";import{defineTool}from"eve/tools";import{analyzeLocalTrace}from"#tracing/local/trace-analysis.js";const MAX_OFFSET=1e5,inspectTraceTool=defineTool({description:`Inspect one trace as a bounded structural timeline. Use offset to page through larger traces. Tool records include a short argument preview and availableFields; use inspect_trace_spans only for selected raw tool payloads.`,inputSchema:{type:`object`,additionalProperties:!1,properties:{limit:{type:`integer`,minimum:1,maximum:200},offset:{type:`integer`,minimum:0,maximum:MAX_OFFSET,description:`Zero-based record offset for paging through larger traces.`},traceId:{type:`string`,pattern:`^[0-9a-f]{32}$`}},required:[`traceId`]},outputSchema:{type:`object`,additionalProperties:!0},async execute(e,t){let{limit:n,offset:r,traceId:i}=parseInput(e),a=await readTraceSources(i,t),o=analyzeLocalTrace(i,a.map(({span:e})=>e)),s=new Map(a.map(e=>[e.span.spanId,e])),c=o.records.slice(r,r+n).map(e=>{let t=s.get(e.spanId),n=t===void 0?void 0:detailFields(t),r=n===void 0?[]:[`arguments`,`result`,`error`].filter(e=>typeof n[e]==`string`),i=n?.arguments;return{...boundedRecord(e),availableFields:r,...e.category===`tool`&&typeof i==`string`?{argumentsPreview:boundedText(i,200)}:{}}});return{traceId:i,offset:r,timeline:c,summary:o.summary,modelWorkMs:o.modelWorkMs,toolWorkMs:o.toolWorkMs,groups:o.groups,total:o.records.length,hasMore:r+c.length<o.records.length,truncated:r+c.length<o.records.length}}});function resolveInspectTraceTool(e){return resolveLocalOnly(e,inspectTraceTool)}var inspect_trace_default=defineLocalOnlyDynamic(inspectTraceTool);function parseInput(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Trace inspection input must be an object.`);let t=e;if(typeof t.traceId!=`string`||!TRACE_ID.test(t.traceId))throw Error(`traceId must be a lowercase 32-character hex id.`);if(t.limit!==void 0&&(typeof t.limit!=`number`||!Number.isInteger(t.limit)||t.limit<1||t.limit>200))throw Error(`limit must be an integer between 1 and 200.`);if(t.offset!==void 0&&(typeof t.offset!=`number`||!Number.isInteger(t.offset)||t.offset<0||t.offset>MAX_OFFSET))throw Error(`offset must be an integer between 0 and ${MAX_OFFSET}.`);return{limit:t.limit??40,offset:t.offset??0,traceId:t.traceId}}function boundedRecord(e){return e.error===void 0?e:{...e,error:boundedText(e.error,500)}}export{inspect_trace_default as default,resolveInspectTraceTool};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type LocalTraceSummary } from "#tracing/local
|
|
1
|
+
import { type LocalTraceSummary } from "#tracing/local/trace-summary.js";
|
|
2
2
|
import type { ResolvedSelfModificationConfig } from "../../../../config.js";
|
|
3
3
|
export declare function resolveSearchTracesTool(config: ResolvedSelfModificationConfig): (import("eve/tools").ToolDefinition<Record<string, unknown>, {
|
|
4
4
|
conversationId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineLocalOnlyDynamic,resolveLocalOnly}from"../../../local-only.js";import{TRACE_ID,readTraceSources}from"../../../trace-inspection.js";import{summarizeLocalTrace}from"#tracing/local
|
|
1
|
+
import{defineLocalOnlyDynamic,resolveLocalOnly}from"../../../local-only.js";import{TRACE_ID,readTraceSources}from"../../../trace-inspection.js";import{summarizeLocalTrace}from"#tracing/local/trace-summary.js";import{defineTool}from"eve/tools";import{resolveConversationId}from"#shared/conversation-identity.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{queryLocalTraceSummaries}from"#tracing/local/trace-query.js";import{localTraceConversationMarker,localTraceIndexedMarker}from"#tracing/local/trace-discovery-index.js";const DEFAULT_SORT_BY=`latest`,searchTracesTool=defineTool({description:`Search summaries for traces in the invoking conversation.`,inputSchema:{type:`object`,additionalProperties:!1,properties:{limit:{type:`integer`,minimum:1,maximum:50,default:50},sortBy:{enum:[`duration`,`failures`,`inputTokens`,`latest`],type:`string`,default:DEFAULT_SORT_BY,description:`Rank examined traces by elapsed time, error-span count, summed step input tokens, or start time. Defaults to latest.`}}},outputSchema:{type:`object`,additionalProperties:!0},async execute(e,t){let n=parseInput(e),r=trace.getSpan(context.active())?.spanContext().traceId,i=resolveConversationId(t.session.parent?.rootSessionId??t.session.id),a=await t.getSandbox(),[o,s,c]=await Promise.all([a.run({command:`ls -1dt /traces/*`}),a.run({command:`ls -1 /traces/*/${localTraceIndexedMarker()}`}),a.run({command:`ls -1 /traces/*/${localTraceConversationMarker(i)}`})]);if(o.exitCode!==0&&!isEmptyTraceListing(o))throw Error(`Could not list local traces: ${o.stderr}`);let l=[...traceIds(o.stdout)],u=l.filter(e=>e!==r),d=traceIds(s.stdout),f=new Set(traceIds(c.stdout)),p=u.filter(e=>!d.has(e)),m=p.slice(0,100),h=new Map,g=0,read=async e=>{try{return await readTraceSources(e,t)}catch(e){if(t.abortSignal.aborted)throw e;g+=1;return}};for(let e of m){if(t.abortSignal.aborted)throw Error(`Trace search was cancelled.`);let n=await read(e);n!==void 0&&contains(n,`gen_ai.conversation.id`,i)&&(f.add(e),h.set(e,summarizeLocalTrace(e,n.map(({span:e})=>e))))}let _=u.filter(e=>f.has(e)),v=_.slice(0,200),y=[];for(let e of v){if(t.abortSignal.aborted)throw Error(`Trace search was cancelled.`);let n=h.get(e);if(n!==void 0){y.push(n);continue}let r=await read(e);r!==void 0&&y.push(summarizeLocalTrace(e,r.map(({span:e})=>e)))}let b=queryLocalTraceSummaries(y,n),x=p.length-m.length+_.length-v.length,S={complete:x===0&&g===0,considered:v.length,matched:_.length,stored:l.length},C=[];return x!==0&&C.push(`Some older traces could not be included.`),g!==0&&C.push(`Some traces could not be read.`),C.length>0&&(S.warning=C.join(` `)),{conversationId:i,coverage:S,matches:b.matches,truncated:b.truncated}}});function parseInput(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Trace search input must be an object.`);let t=e,n=t.limit===void 0?50:t.limit;if(typeof n!=`number`||!Number.isInteger(n)||n<1||n>50)throw Error(`limit must be an integer between 1 and 50.`);if(t.sortBy!==void 0&&t.sortBy!==`latest`&&t.sortBy!==`duration`&&t.sortBy!==`failures`&&t.sortBy!==`inputTokens`)throw Error(`sortBy must be latest, duration, failures, or inputTokens.`);return{limit:n,sortBy:t.sortBy??DEFAULT_SORT_BY}}function traceIds(e){let t=new Set;for(let n of e.split(/\r?\n/u)){let e=n.split(`/`).filter(Boolean).find(e=>TRACE_ID.test(e));e!==void 0&&t.add(e)}return t}function isEmptyTraceListing(e){return e.stdout.trim()===``&&e.stderr.includes(`/traces/*`)&&/no such file or directory/iu.test(e.stderr)}function contains(e,t,n){return e.some(({span:e})=>e.attributes[t]===n)}function resolveSearchTracesTool(e){return resolveLocalOnly(e,searchTracesTool)}var search_traces_default=defineLocalOnlyDynamic(searchTracesTool);export{search_traces_default as default,resolveSearchTracesTool};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ToolContext } from "eve/tools";
|
|
2
|
-
import { type LocalTraceSpan } from "#tracing/local
|
|
2
|
+
import { type LocalTraceSpan } from "#tracing/local/trace-reader.js";
|
|
3
3
|
export interface LocalTraceSpanSource {
|
|
4
4
|
readonly segmentFile: string;
|
|
5
5
|
readonly span: LocalTraceSpan;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{parseLocalTraceSegment}from"#tracing/local
|
|
1
|
+
import{parseLocalTraceSegment}from"#tracing/local/trace-reader.js";const TRACE_ID=/^[0-9a-f]{32}$/u,SPAN_ID=/^[0-9a-f]{16}$/u,SEGMENT_FILE=/^[0-9a-f]{16}\.otlp\.json$/u;async function readTraceSources(e,t){let n=await t.getSandbox(),r=`/traces/${e}/segments`,i=await n.run({command:`ls -1 ${r}`});if(i.exitCode!==0)throw Error(`Could not list local trace segments: ${i.stderr}`);let a=i.stdout.split(/\r?\n/u).filter(e=>SEGMENT_FILE.test(e)).sort((e,t)=>e.localeCompare(t));if(a.length>500)throw Error(`Trace has ${a.length} segments (maximum 500).`);let o=[];for(let i of a){if(t.abortSignal.aborted)throw Error(`Trace inspection was cancelled.`);let a=await n.readTextFile({path:`${r}/${i}`});if(!(a===null||a.length>8388608))for(let t of parseLocalTraceSegment(a,e))o.push({segmentFile:i,span:t})}return o}function boundedText(e,t){return e.length<=t?e:`${e.slice(0,t-1)}…`}function detailFields(e){return{arguments:e.span.attributes[`gen_ai.tool.call.arguments`],error:e.span.statusMessage,result:e.span.attributes[`gen_ai.tool.call.result`]}}export{SPAN_ID,TRACE_ID,boundedText,detailFields,readTraceSources};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{DEFAULT_CONNECT_PACKAGE_VERSION,resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_CHANNEL_TEMPLATES}from"./web-template.js";import{AGENT_INSTRUCTIONS_TEMPLATE}from"./instructions-template.js";import{SCAFFOLDED_AGENT_PATHS}from"./agent-paths.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.137`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.
|
|
1
|
+
import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{DEFAULT_CONNECT_PACKAGE_VERSION,resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_CHANNEL_TEMPLATES}from"./web-template.js";import{AGENT_INSTRUCTIONS_TEMPLATE}from"./instructions-template.js";import{SCAFFOLDED_AGENT_PATHS}from"./agent-paths.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.137`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.79.0`,nodeEngine:`>=24`};function resolveEvePackageContract(e=DEFAULT_EVE_PACKAGE_CONTRACT){return{version:resolveVersionToken(`evePackage.version`,e.version),nodeEngine:resolveVersionToken(`evePackage.nodeEngine`,e.nodeEngine)}}function modelProviderSlug(e){let t=(e.split(`/`)[0]??``).replaceAll(/[^A-Za-z0-9._-]/gu,``);return t.length>0?t:`anthropic`}function byokProviderEnvVar(e){let t=modelProviderSlug(e).toUpperCase().replaceAll(/[^A-Z0-9]/gu,`_`);return`${/^[0-9]/.test(t)?`_`:``}${t}_API_KEY`}function agentTemplateFiles(e,t){return{[SCAFFOLDED_AGENT_PATHS.config]:renderAgentTemplate(e,t),[SCAFFOLDED_AGENT_PATHS.channel]:WEB_CHANNEL_TEMPLATES.default,[SCAFFOLDED_AGENT_PATHS.instructions]:AGENT_INSTRUCTIONS_TEMPLATE}}function renderAgentTemplate(e,t){let n=parseChatGptModelSelection(e);return n===void 0?BASE_AGENT_TEMPLATE.replaceAll(`__EVE_INIT_MODEL__`,e).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t)):`import { defineAgent } from "eve";\nimport { chatgpt } from "eve/models/openai";\n\nexport default defineAgent({\n model: chatgpt(${JSON.stringify(n)}),\n${reasoningTemplateLine(t)}});\n`}function reasoningTemplateLine(e){return e===void 0||e===`provider-default`?``:` reasoning: "${e}",\n`}function renderTemplate(e,t){return e===BASE_AGENT_TEMPLATE&&parseChatGptModelSelection(t.model)!==void 0?renderAgentTemplate(t.model,t.reasoning):e.replaceAll(`__EVE_INIT_APP_NAME__`,t.appName).replaceAll(`__EVE_INIT_MODEL__`,t.model).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t.reasoning)).replaceAll(`__EVE_INIT_BYOK_PROVIDER__`,modelProviderSlug(t.model)).replaceAll(`__EVE_INIT_BYOK_ENV_VAR__`,byokProviderEnvVar(t.model)).replaceAll(`__EVE_INIT_PACKAGE_VERSION__`,formatEveDependencySpecifier(t.eveVersion)).replaceAll(`__EVE_INIT_AI_SDK_VERSION__`,t.aiPackageVersion).replaceAll(`__EVE_INIT_CONNECT_VERSION__`,t.connectPackageVersion).replaceAll(`__EVE_INIT_ZOD_VERSION__`,t.zodPackageVersion).replaceAll(`__EVE_INIT_TYPESCRIPT_VERSION__`,t.typescriptPackageVersion).replaceAll(`__EVE_INIT_TYPES_NODE_VERSION__`,t.nodeTypesVersion).replaceAll(`__EVE_INIT_NODE_ENGINE__`,t.nodeEngine)}function formatEveDependencySpecifier(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z-.]+)?$/.test(e)?`^${e}`:e}const BASE_AGENT_TEMPLATE=`import { defineAgent } from "eve";
|
|
2
2
|
|
|
3
3
|
export default defineAgent({
|
|
4
4
|
model: "__EVE_INIT_MODEL__",
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { ConversationContext } from "#shared/conversation-context.js";
|
|
2
|
+
export declare function isSampledTrace(context: {
|
|
3
|
+
readonly traceFlags: number;
|
|
4
|
+
}): boolean;
|
|
2
5
|
import { type InstrumentationDecision } from "#shared/instrumentation-decision.js";
|
|
3
6
|
export type TraceCaptureContext = {
|
|
4
7
|
readonly agentName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{DROP_INSTRUMENTATION}from"#shared/instrumentation-decision.js";function resolveTracePolicy(e,t,n){try{let n=e?.(t);return resolveTracePolicyDecision(n??{emit:!0,recordInputs:t.audience===`public`||t.environment===`development`,recordOutputs:t.audience===`public`||t.environment===`development`},t)}catch(e){try{n?.(e)}catch{}return DROP_INSTRUMENTATION}}function resolveTracePolicyDecision(e,t){if(e===!1)return DROP_INSTRUMENTATION;if(e===!0){let e=shouldCaptureInstrumentationContent(t);return{action:`record`,recordInputs:e,recordOutputs:e}}return e.emit?{action:`record`,recordInputs:e.recordInputs,recordOutputs:e.recordOutputs}:DROP_INSTRUMENTATION}export{resolveTracePolicy,resolveTracePolicyDecision};
|
|
1
|
+
import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{DROP_INSTRUMENTATION}from"#shared/instrumentation-decision.js";function isSampledTrace(e){return!!(e.traceFlags&1)}function resolveTracePolicy(e,t,n){try{let n=e?.(t);return resolveTracePolicyDecision(n??{emit:!0,recordInputs:t.audience===`public`||t.environment===`development`,recordOutputs:t.audience===`public`||t.environment===`development`},t)}catch(e){try{n?.(e)}catch{}return DROP_INSTRUMENTATION}}function resolveTracePolicyDecision(e,t){if(e===!1)return DROP_INSTRUMENTATION;if(e===!0){let e=shouldCaptureInstrumentationContent(t);return{action:`record`,recordInputs:e,recordOutputs:e}}return e.emit?{action:`record`,recordInputs:e.recordInputs,recordOutputs:e.recordOutputs}:DROP_INSTRUMENTATION}export{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ModelMessage, ToolExecutionOptions } from "ai";
|
|
2
2
|
import type { StandardJSONSchemaV1, StandardSchemaV1 } from "#compiled/@standard-schema/spec/index.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ToolApproval } from "#approval/definition.js";
|
|
4
4
|
import type { SessionContext } from "#context/session-context.js";
|
|
5
5
|
import type { JsonObject } from "#shared/json.js";
|
|
6
6
|
import type { TokenResult } from "#shared/connection-types.js";
|
|
@@ -214,7 +214,7 @@ export interface ToolDefinition<TInput = unknown, TOutput = unknown> extends Pub
|
|
|
214
214
|
* - {@link never}: never require approval
|
|
215
215
|
* - {@link once}: require approval only the first time per session
|
|
216
216
|
*/
|
|
217
|
-
approval?:
|
|
217
|
+
approval?: ToolApproval<ApprovalContextInput<TInput>>;
|
|
218
218
|
/**
|
|
219
219
|
* Optional projection controlling what the model sees as the tool result.
|
|
220
220
|
* Receives the full `TOutput` from {@link execute} and returns the
|
|
@@ -289,7 +289,7 @@ export declare function stampToolDefinition<T extends {
|
|
|
289
289
|
readonly outputSchema?: unknown;
|
|
290
290
|
readonly execute?: (...args: never[]) => unknown;
|
|
291
291
|
readonly label?: ToolLabelDefinition;
|
|
292
|
-
readonly approval?:
|
|
292
|
+
readonly approval?: ToolApproval<never>;
|
|
293
293
|
readonly approvalKey?: (...args: never[]) => unknown;
|
|
294
294
|
readonly toModelOutput?: (...args: never[]) => unknown;
|
|
295
295
|
}>(definition: T, definer: "defineTool" | "defineWorkflowTool"): T;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ToolApproval } from "#approval/definition.js";
|
|
2
2
|
import type { JsonObject, JsonPrimitive } from "#shared/json.js";
|
|
3
|
-
export type DurableDynamicCallbackPhase = "labelComplete" | "labelDelta" | "labelStart" | "approvalKey" | "approvalRequest" | "approvalResponse" | "execute" | "toModelOutput" | "inputSchema" | "outputSchema";
|
|
3
|
+
export type DurableDynamicCallbackPhase = "labelComplete" | "labelDelta" | "labelStart" | "approvalKey" | "approvalPrompt" | "approvalRequest" | "approvalResponse" | "execute" | "toModelOutput" | "inputSchema" | "outputSchema";
|
|
4
4
|
export type DurableDynamicCallbackFn = (closure: JsonObject, ...args: never[]) => unknown;
|
|
5
5
|
/**
|
|
6
6
|
* Persisted binding for one callback phase. Identity is
|
|
@@ -22,6 +22,7 @@ export interface DurableDynamicToolCallbacks {
|
|
|
22
22
|
readonly start?: DurableDynamicCallbackReference;
|
|
23
23
|
};
|
|
24
24
|
readonly approvalKey?: DurableDynamicCallbackReference;
|
|
25
|
+
readonly approvalPrompt?: DurableDynamicCallbackReference;
|
|
25
26
|
readonly approvalRequest?: DurableDynamicCallbackReference;
|
|
26
27
|
readonly approvalResponse?: DurableDynamicCallbackReference;
|
|
27
28
|
readonly toModelOutput?: DurableDynamicCallbackReference;
|
|
@@ -41,6 +42,7 @@ type LiveDurableDynamicToolCallbacks = Partial<{
|
|
|
41
42
|
readonly start?: StampedDurableDynamicCallback;
|
|
42
43
|
};
|
|
43
44
|
approvalKey: StampedDurableDynamicCallback;
|
|
45
|
+
approvalPrompt: StampedDurableDynamicCallback;
|
|
44
46
|
approvalRequest: StampedDurableDynamicCallback;
|
|
45
47
|
approvalResponse: StampedDurableDynamicCallback;
|
|
46
48
|
toModelOutput: StampedDurableDynamicCallback;
|
|
@@ -103,7 +105,7 @@ export declare function collectDurableDynamicToolCallbacks(input: {
|
|
|
103
105
|
readonly delta?: (...args: never[]) => unknown;
|
|
104
106
|
readonly start?: (...args: never[]) => unknown;
|
|
105
107
|
};
|
|
106
|
-
readonly approval?:
|
|
108
|
+
readonly approval?: ToolApproval<never>;
|
|
107
109
|
readonly approvalKey?: (...args: never[]) => unknown;
|
|
108
110
|
readonly execute?: (...args: never[]) => unknown;
|
|
109
111
|
readonly toModelOutput?: (...args: never[]) => unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readDurableSchema}from"#tools/durable-schema.js";import{resolveApprovalPolicy}from"#approval/definition.js";const STAMPED_CALLBACK=Symbol.for(`eve:durable-dynamic-callback`),DURABLE_DYNAMIC_TOOL_CALLBACKS=Symbol.for(`eve:durable-dynamic-tool-callbacks`),REGISTRY=Symbol.for(`eve:scoped-dynamic-tool-callbacks`);function getRegistry(){let e=globalThis;return e[REGISTRY]??=new Map}function getSessionBindings(e){let t=getRegistry(),n=t.get(e);return n!==void 0&&(t.delete(e),t.set(e,n)),n}function callbackKey(e,t){return JSON.stringify([e.scope,e.resolverSlug,e.entryKey,e.name,t])}function registerDurableDynamicCallback(e){let t=getRegistry(),n=getSessionBindings(e.owner.sessionId);n===void 0&&(n=new Map,t.set(e.owner.sessionId,n),t.size>1024&&t.delete(t.keys().next().value)),n.set(callbackKey(e.owner,e.phase),e.callback)}function lookupDurableDynamicCallback(e,t){return getSessionBindings(e.sessionId)?.get(callbackKey(e,t))}function clearDurableDynamicCallbacks(e,t){if(t===void 0){getRegistry().delete(e);return}let n=getSessionBindings(e);if(n===void 0)return;let r=JSON.stringify([t.scope,t.resolverSlug]).slice(0,-1)+`,`;for(let e of n.keys())e.startsWith(r)&&n.delete(e)}function callDurableDynamicCallback(e,t,...n){return e(t,...n)}function hasUnregisteredDurableDynamicCallbacks(e,t){return e.some(e=>durableCallbackPhases(e.callbacks).some(n=>lookupDurableDynamicCallback({...e,...t},n)===void 0))}function durableCallbackPhases(e){return[[`execute`,e.execute],[`inputSchema`,e.inputSchema],[`outputSchema`,e.outputSchema],[`labelComplete`,e.label?.complete],[`labelDelta`,e.label?.delta],[`labelStart`,e.label?.start],[`approvalKey`,e.approvalKey],[`approvalRequest`,e.approvalRequest],[`approvalResponse`,e.approvalResponse],[`toModelOutput`,e.toModelOutput]].flatMap(([e,t])=>t===void 0?[]:[e])}function defineDurableCallback(e){return stampDurableDynamicCallback((...t)=>e.callback(e.closure,...t),{callback:(t,...n)=>Reflect.apply(e.callback,void 0,[t,...n]),closure:e.closure})}function stampDurableDynamicCallback(e,t){return Object.defineProperty(e,STAMPED_CALLBACK,{configurable:!0,value:t}),e}function readDurableDynamicCallback(e){if(typeof e==`function`)return Reflect.get(e,STAMPED_CALLBACK)}function stampDurableDynamicToolCallbacks(e,t){Object.defineProperty(e,DURABLE_DYNAMIC_TOOL_CALLBACKS,{configurable:!0,value:t})}function collectDurableDynamicToolCallbacks(e){let t=readDurableDynamicCallback(e.label?.complete),n=readDurableDynamicCallback(e.label?.delta),r=readDurableDynamicCallback(e.label?.start),i=e.approval===void 0?void 0:readDurableDynamicCallback(resolveApprovalPolicy(e.approval)),a=e.approval===void 0||typeof e.approval==`function`?void 0:readDurableDynamicCallback(e.approval.response),o=readDurableDynamicCallback(e.approvalKey),s=readDurableDynamicCallback(e.
|
|
1
|
+
import{readDurableSchema}from"#tools/durable-schema.js";import{resolveApprovalPolicy}from"#approval/definition.js";const STAMPED_CALLBACK=Symbol.for(`eve:durable-dynamic-callback`),DURABLE_DYNAMIC_TOOL_CALLBACKS=Symbol.for(`eve:durable-dynamic-tool-callbacks`),REGISTRY=Symbol.for(`eve:scoped-dynamic-tool-callbacks`);function getRegistry(){let e=globalThis;return e[REGISTRY]??=new Map}function getSessionBindings(e){let t=getRegistry(),n=t.get(e);return n!==void 0&&(t.delete(e),t.set(e,n)),n}function callbackKey(e,t){return JSON.stringify([e.scope,e.resolverSlug,e.entryKey,e.name,t])}function registerDurableDynamicCallback(e){let t=getRegistry(),n=getSessionBindings(e.owner.sessionId);n===void 0&&(n=new Map,t.set(e.owner.sessionId,n),t.size>1024&&t.delete(t.keys().next().value)),n.set(callbackKey(e.owner,e.phase),e.callback)}function lookupDurableDynamicCallback(e,t){return getSessionBindings(e.sessionId)?.get(callbackKey(e,t))}function clearDurableDynamicCallbacks(e,t){if(t===void 0){getRegistry().delete(e);return}let n=getSessionBindings(e);if(n===void 0)return;let r=JSON.stringify([t.scope,t.resolverSlug]).slice(0,-1)+`,`;for(let e of n.keys())e.startsWith(r)&&n.delete(e)}function callDurableDynamicCallback(e,t,...n){return e(t,...n)}function hasUnregisteredDurableDynamicCallbacks(e,t){return e.some(e=>durableCallbackPhases(e.callbacks).some(n=>lookupDurableDynamicCallback({...e,...t},n)===void 0))}function durableCallbackPhases(e){return[[`execute`,e.execute],[`inputSchema`,e.inputSchema],[`outputSchema`,e.outputSchema],[`labelComplete`,e.label?.complete],[`labelDelta`,e.label?.delta],[`labelStart`,e.label?.start],[`approvalKey`,e.approvalKey],[`approvalPrompt`,e.approvalPrompt],[`approvalRequest`,e.approvalRequest],[`approvalResponse`,e.approvalResponse],[`toModelOutput`,e.toModelOutput]].flatMap(([e,t])=>t===void 0?[]:[e])}function defineDurableCallback(e){return stampDurableDynamicCallback((...t)=>e.callback(e.closure,...t),{callback:(t,...n)=>Reflect.apply(e.callback,void 0,[t,...n]),closure:e.closure})}function stampDurableDynamicCallback(e,t){return Object.defineProperty(e,STAMPED_CALLBACK,{configurable:!0,value:t}),e}function readDurableDynamicCallback(e){if(typeof e==`function`)return Reflect.get(e,STAMPED_CALLBACK)}function stampDurableDynamicToolCallbacks(e,t){Object.defineProperty(e,DURABLE_DYNAMIC_TOOL_CALLBACKS,{configurable:!0,value:t})}function collectDurableDynamicToolCallbacks(e){let t=readDurableDynamicCallback(e.label?.complete),n=readDurableDynamicCallback(e.label?.delta),r=readDurableDynamicCallback(e.label?.start),i=e.approval===void 0?void 0:readDurableDynamicCallback(resolveApprovalPolicy(e.approval)),a=e.approval===void 0||typeof e.approval==`function`?void 0:readDurableDynamicCallback(e.approval.response),o=readDurableDynamicCallback(e.approvalKey),s=readDurableDynamicCallback(e.approval===void 0||typeof e.approval==`function`?void 0:e.approval.prompt),c=readDurableDynamicCallback(e.execute),l=readDurableDynamicCallback(e.toModelOutput),u={},d=readDurableSchema(e.inputSchema),f=readDurableSchema(e.outputSchema);return d!==void 0&&(u.inputSchema=d),f!==void 0&&(u.outputSchema=f),c!==void 0&&(u.execute=c),(t!==void 0||n!==void 0||r!==void 0)&&(u.label={complete:t,delta:n,start:r}),o!==void 0&&(u.approvalKey=o),s!==void 0&&(u.approvalPrompt=s),i!==void 0&&(u.approvalRequest=i),a!==void 0&&(u.approvalResponse=a),l!==void 0&&(u.toModelOutput=l),u}function readDurableDynamicToolCallbacks(e){return e[DURABLE_DYNAMIC_TOOL_CALLBACKS]}export{callDurableDynamicCallback,clearDurableDynamicCallbacks,collectDurableDynamicToolCallbacks,defineDurableCallback,hasUnregisteredDurableDynamicCallbacks,lookupDurableDynamicCallback,readDurableDynamicCallback,readDurableDynamicToolCallbacks,registerDurableDynamicCallback,stampDurableDynamicCallback,stampDurableDynamicToolCallbacks};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ToolApproval } from "#approval/definition.js";
|
|
2
2
|
import type { DynamicResolveContext, DynamicToolEventName } from "#dynamic/definition.js";
|
|
3
3
|
import type { PublicToolInputSchema, PublicToolOutputSchema, ToolLabelDefinition, ToolContext } from "#tools/definition.js";
|
|
4
4
|
import type { ToolModelOutput } from "#tools/model-output.js";
|
|
@@ -37,7 +37,7 @@ export interface DynamicToolEntry<TInput = Record<string, unknown>, TOutput = an
|
|
|
37
37
|
* before the call executes. Dynamic approval request and response callbacks
|
|
38
38
|
* use the same durable descriptor boundary as `execute` and `toModelOutput`.
|
|
39
39
|
*/
|
|
40
|
-
readonly approval?:
|
|
40
|
+
readonly approval?: ToolApproval<TInput>;
|
|
41
41
|
/** Derives the input-scoped key recorded when this tool is approved. */
|
|
42
42
|
readonly approvalKey?: (toolInput: Readonly<Record<string, unknown>>) => string;
|
|
43
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
async function executeAskQuestionTool(e,t){"use workflow";return toAskQuestionOutput(await t.ask(toAskQuestionRequest(e)))}function toAskQuestionRequest(e){let t=e.options?.map(e=>({description:e.description,id:e.label,label:e.label}));return{allowFreeform:!0,display:t===void 0?`text`:`select`,prompt:e.question,...t!==void 0&&{options:t}}}function toAskQuestionOutput(e){switch(e.status){case`answered`:return{answer:e.optionId??e.text??``,status:`answered`};case`cancelled`:return{interrupted:!0};case`unavailable`:return{status:`unavailable`}}}executeAskQuestionTool.workflowId=`workflow//eve@0.
|
|
1
|
+
async function executeAskQuestionTool(e,t){"use workflow";return toAskQuestionOutput(await t.ask(toAskQuestionRequest(e)))}function toAskQuestionRequest(e){let t=e.options?.map(e=>({description:e.description,id:e.label,label:e.label}));return{allowFreeform:!0,display:t===void 0?`text`:`select`,prompt:e.question,...t!==void 0&&{options:t}}}function toAskQuestionOutput(e){switch(e.status){case`answered`:return{answer:e.optionId??e.text??``,status:`answered`};case`cancelled`:return{interrupted:!0};case`unavailable`:return{status:`unavailable`}}}executeAskQuestionTool.workflowId=`workflow//eve@0.79.0//executeAskQuestionTool`;export{executeAskQuestionTool,toAskQuestionOutput,toAskQuestionRequest};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e,t){"use workflow";let n=new Promise(e=>t.abortSignal.addEventListener(`abort`,()=>e(`interrupted`),{once:!0})),r=sleep(Math.ceil(e.seconds*1e3)).then(()=>`elapsed`);return await Promise.race([r,n])===`elapsed`?{waitedSeconds:e.seconds}:{interrupted:!0}}executeSleepTool.workflowId=`workflow//eve@0.
|
|
1
|
+
import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e,t){"use workflow";let n=new Promise(e=>t.abortSignal.addEventListener(`abort`,()=>e(`interrupted`),{once:!0})),r=sleep(Math.ceil(e.seconds*1e3)).then(()=>`elapsed`);return await Promise.race([r,n])===`elapsed`?{waitedSeconds:e.seconds}:{interrupted:!0}}executeSleepTool.workflowId=`workflow//eve@0.79.0//executeSleepTool`;export{executeSleepTool};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { StandardJSONSchemaV1, StandardSchemaV1 } from "#compiled/@standard-schema/spec/index.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ToolApproval } from "#approval/definition.js";
|
|
3
3
|
import type { MessageResult, SendTurnOptions } from "#client/types.js";
|
|
4
4
|
import type { JsonObject } from "#shared/json.js";
|
|
5
5
|
import { type PublicToolDefinition, type ToolContext, type ToolInputRequest, type ToolInputRequestOptions, type ToolInputResponse } from "#tools/definition.js";
|
|
@@ -128,7 +128,7 @@ export type WorkflowServeContext<TOutput = unknown> = WorkflowSharedContext & {
|
|
|
128
128
|
declare const WORKFLOW_TOOL_BRAND: unique symbol;
|
|
129
129
|
interface WorkflowToolDefinitionBase<TInput, TOutput> extends PublicToolDefinition<TInput, TOutput> {
|
|
130
130
|
readonly [WORKFLOW_TOOL_BRAND]: true;
|
|
131
|
-
approval?:
|
|
131
|
+
approval?: ToolApproval<unknown extends TInput ? Record<string, unknown> : TInput>;
|
|
132
132
|
toModelOutput?: (output: TOutput) => ToolModelOutput | Promise<ToolModelOutput>;
|
|
133
133
|
}
|
|
134
134
|
/** A workflow tool whose calls are ordinary tool calls: the turn waits until each settles. */
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { InstrumentationProviderDefinition } from "#instrumentation/lifecycle.js";
|
|
2
|
+
import type { AgentActionTraceState } from "#tracing/eve/agent-trace-state.js";
|
|
3
|
+
import type { AgentTracing } from "#compiled/@eve/tracing/index.js";
|
|
4
|
+
/** Approval spans live under their tool call; hook state keeps only the locator. */
|
|
5
|
+
export declare function createAgentApprovalInstrumentation(input: {
|
|
6
|
+
readonly tracing: AgentTracing;
|
|
7
|
+
readonly actionStateFor: (sessionId: string, turnId: string, callId: string) => Promise<AgentActionTraceState | undefined>;
|
|
8
|
+
}): Pick<NonNullable<InstrumentationProviderDefinition["events"]>, "input.requested" | "input.resolved">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{resumeTool}from"#tracing/eve/agent-tool-instrumentation.js";function createAgentApprovalInstrumentation(e){async function toolFor(t,n,r){let i=await e.actionStateFor(t,n,r);return i===void 0?void 0:resumeTool(e.tracing,i)}async function onRequested(e,t){e.kind===`tool-approval`&&t.state.get()===void 0&&await(await toolFor(e.scope.sessionId,e.scope.turnId,e.action.callId))?.approval({requestId:e.requestId,request:e.request})!==void 0&&t.state.set({callId:e.action.callId,sessionId:e.scope.sessionId,turnId:e.scope.turnId})}async function onResolved(e,t){let n=t.state.get();if(typeof n!=`object`||!n||Array.isArray(n))return;let{callId:r,sessionId:i,turnId:a}=n;if(typeof r!=`string`||typeof i!=`string`||typeof a!=`string`)return;let o=(await toolFor(i,a,r))?.findApproval(e.requestId);o!==void 0&&(e.outcome===`failed`?await o.fail(e.error):await o.complete({outcome:e.outcome,response:e.response}))}return{"input.requested":onRequested,"input.resolved":onResolved}}export{createAgentApprovalInstrumentation};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { InstrumentationProviderDefinition } from "#instrumentation/lifecycle.js";
|
|
2
|
-
import type { AgentTraceStateStore } from "#tracing/agent-trace-state.js";
|
|
2
|
+
import type { AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
|
|
3
3
|
/** Captures one-to-one channel delivery metadata on the activation that consumes it. */
|
|
4
4
|
export declare function createAgentChannelDeliveryInstrumentation(input: {
|
|
5
5
|
readonly recordInputs: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{contextStorage}from"#context/container.js";import{ActiveChannelDeliveriesKey}from"#context/keys.js";import{isSampledTrace}from"#
|
|
1
|
+
import{contextStorage}from"#context/container.js";import{ActiveChannelDeliveriesKey}from"#context/keys.js";import{isSampledTrace}from"#shared/trace-policy.js";import{contentAttribute}from"#compiled/@eve/tracing/otel.js";function createAgentChannelDeliveryInstrumentation(e){let onStarted=async(t,n)=>{let r=await e.stateStore.get(`session`,t.sessionId),i=(t.turnId===void 0||t.sequence===void 0?void 0:await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId])))?.context??r?.context;if(i===void 0||!isSampledTrace(i))return;let a=e.recordInputs?contentAttribute(t.input):void 0,o={};a!==void 0&&(o.inputAttribute=a),t.delivery.requestTraceContext!==void 0&&(o.requestTraceContext={spanId:t.delivery.requestTraceContext.spanId,traceFlags:t.delivery.requestTraceContext.traceFlags,traceId:t.delivery.requestTraceContext.traceId}),n.state.set(o)},onTerminal=async(t,n)=>{let r=readState(n.state.get());if(r===void 0||t.turnId===void 0)return;let i=await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId]));i!==void 0&&isSampledTrace(i.context)&&isOnlyActiveDelivery(t.sessionId,t.turnId,t.delivery.deliveryId)&&await e.stateStore.update(`turn`,JSON.stringify([t.sessionId,t.turnId]),e=>({...e,channelDelivery:{channelKind:t.delivery.channelKind,channelName:t.delivery.channelName,deliveryId:t.delivery.deliveryId,...r.inputAttribute===void 0?void 0:{inputAttribute:r.inputAttribute},...t.delivery.requestId===void 0?void 0:{requestId:t.delivery.requestId},...r.requestTraceContext===void 0?void 0:{requestTraceContext:r.requestTraceContext}}}))};return{"channel.delivery.cancelled":onTerminal,"channel.delivery.completed":onTerminal,"channel.delivery.failed":onTerminal,"channel.delivery.started":onStarted}}function isOnlyActiveDelivery(e,t,n){let r=contextStorage.getStore()?.get(ActiveChannelDeliveriesKey),i=r?.[0];return r?.length===1&&i?.sessionId===e&&i.turnId===t&&i.delivery.deliveryId===n}function readState(e){if(!isRecord(e))return;let t=isSpanContext(e.requestTraceContext)?e.requestTraceContext:void 0;return{inputAttribute:typeof e.inputAttribute==`string`?e.inputAttribute:void 0,requestTraceContext:t}}function isSpanContext(e){return isRecord(e)&&typeof e.spanId==`string`&&typeof e.traceFlags==`number`&&typeof e.traceId==`string`}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{createAgentChannelDeliveryInstrumentation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{applyLiveDeliveryAudienceCeiling,readForwardedTraceAssertion}from"#shared/forwarded-trace-policy.js";import{ConversationIdKey}from"#context/keys.js";import{readConversationId}from"#shared/conversation-identity.js";import{readActionTraceContext,readTurnTraceContext}from"#tracing/eve/agent-trace-context-store.js";function resolveToolCallAgentTrace(e){let{serializedContext:t,sessionId:n,turnId:r}=e,i=readActionTraceContext(t,n,r,e.callId)??readTurnTraceContext(t,n,r),a=e.conversation?.audience??`unknown`,o=e.conversation?.environment??`production`,s=readForwardedTraceAssertion(i?.forwardedTracePolicy),c=i?.decision===void 0?i:{...i,decision:applyLiveDeliveryAudienceCeiling(i.decision,a,s,o)};return{conversationId:readConversationId(t[ConversationIdKey.name]),originAudience:s?.originAudience??a,parentTraceContext:c}}export{resolveToolCallAgentTrace};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { InstrumentationMemoryExecutionOperation } from "#instrumentation/memory.js";
|
|
2
|
+
import type { ConversationEnvironment } from "#shared/conversation-context.js";
|
|
3
|
+
import type { AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
|
|
4
|
+
import { type AgentTracing } from "#compiled/@eve/tracing/index.js";
|
|
5
|
+
export declare function createAgentMemoryInstrumentation(input: {
|
|
6
|
+
tracing: AgentTracing;
|
|
7
|
+
environment: ConversationEnvironment;
|
|
8
|
+
recordOutputs?: boolean;
|
|
9
|
+
stateStore: AgentTraceStateStore;
|
|
10
|
+
}): {
|
|
11
|
+
runInContext<T>(operation: InstrumentationMemoryExecutionOperation, execute: () => PromiseLike<T>): Promise<T>;
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{normalizeChannelAudience}from"#shared/channel-audience.js";import{applyLiveDeliveryAudienceCeiling,resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{ROOT_CONTEXT,context,trace}from"#compiled/@opentelemetry/api/index.js";import{activeTraceOperation}from"#compiled/@eve/tracing/otel.js";import"#compiled/@eve/tracing/index.js";import{withChannelAudience}from"#tracing/eve/channel-audience-context.js";import{eveTurnIdentity}from"#tracing/eve/operation-input.js";function createAgentMemoryInstrumentation(e){return{async runInContext(t,n){let r=await e.stateStore.get(`session`,t.sessionId),i=t.turnId===void 0?void 0:await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId])),a=activeTraceOperation(),o=a?.reference??i?.context??r?.context;if(o===void 0)return await n();let s=a===void 0?withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(o)),r?.channelAudience):context.active(),c=resolveForwardedTraceSeed(contextStorage.getStore()?.get(SessionTraceSeedKey)),l=c?.decision??r?.decision,u=l===void 0?void 0:applyLiveDeliveryAudienceCeiling(l,normalizeChannelAudience(r?.channelAudience),c?.forwardedTracePolicy,e.environment),d={emit:!!(o.traceFlags&1),recordInputs:u?.action===`record`&&u.recordInputs,recordOutputs:e.recordOutputs===!0&&u?.action===`record`&&u.recordOutputs},f={identity:eveTurnIdentity({...t,turnId:t.turnId??``}),parent:o,context:s,capture:d,phase:t.phase,slot:t.slot,storeId:t.storeId,describe(e){let t=e;return{recordCount:t.recordCount,records:t.outputRecords}}},p=e.tracing.memory;return t.operationName===`search_memory`?await p.search(f,n):await p.write(f,n)}}}export{createAgentMemoryInstrumentation};
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
import type { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
|
|
4
|
-
import type { TraceCapturePolicy } from "#tracing/otel-declaration.js";
|
|
1
|
+
import type { AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
|
|
2
|
+
import type { TraceCapturePolicy } from "#tracing/eve/otel-declaration.js";
|
|
5
3
|
import type { InstrumentationContextRunner, InstrumentationProviderDefinition, InstrumentationSessionStartedEvent, InstrumentationTraceSeed, InstrumentationTurnStartedEvent } from "#instrumentation/lifecycle.js";
|
|
6
|
-
import { type AgentSamplingOperation } from "#tracing/agent-span-contract.js";
|
|
7
4
|
import type { ConversationEnvironment } from "#shared/conversation-context.js";
|
|
5
|
+
import type { AgentSpanIdGenerator, AgentTelemetry } from "#compiled/@eve/tracing/index.js";
|
|
8
6
|
export interface AgentOtelInstrumentationInput {
|
|
7
|
+
/** Span output for eve's agent spans; its `ids` make turns durable across workers. */
|
|
8
|
+
readonly telemetry: AgentTelemetry;
|
|
9
|
+
readonly idGenerator: AgentSpanIdGenerator;
|
|
9
10
|
readonly environment?: ConversationEnvironment;
|
|
10
11
|
/** Whether any destination records model and tool inputs. */
|
|
11
12
|
readonly recordInputs?: boolean;
|
|
12
13
|
/** Whether any destination records model and tool outputs. */
|
|
13
14
|
readonly recordOutputs?: boolean;
|
|
14
15
|
readonly frameworkVersion: string;
|
|
15
|
-
readonly idGenerator: AgentSpanIdGenerator;
|
|
16
|
-
readonly samplesTrace?: (traceId: string, operation?: AgentSamplingOperation) => boolean;
|
|
17
16
|
readonly stateStore: AgentTraceStateStore;
|
|
18
|
-
readonly tracer: Tracer;
|
|
19
17
|
readonly tracePolicy?: TraceCapturePolicy;
|
|
20
18
|
}
|
|
21
19
|
/** OTel event definition and its trusted framework context runner. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isObject}from"#shared/guards.js";import{isUserMessageKind}from"#harness/messages.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{isSampledTrace}from"#shared/trace-policy.js";import{ROOT_CONTEXT,context,trace}from"#compiled/@opentelemetry/api/index.js";import{createAgentToolInstrumentation}from"#tracing/eve/agent-tool-instrumentation.js";import{withChannelAudience}from"#tracing/eve/channel-audience-context.js";import{createEveTracing}from"#tracing/eve/operation-input.js";import{createAgentApprovalInstrumentation}from"#tracing/eve/agent-approval-instrumentation.js";import{createAgentChannelDeliveryInstrumentation}from"#tracing/eve/agent-channel-delivery-instrumentation.js";import{eveActivationMetadata}from"#tracing/eve/metadata.js";import{createAgentMemoryInstrumentation}from"#tracing/eve/agent-memory-instrumentation.js";import{gatewayCostAttributes,readGatewayCostData}from"#tracing/eve/gateway.js";import{createEveSessionTracing}from"#tracing/eve/session.js";import{createEveCapturePolicy}from"#tracing/eve/policy.js";function createAgentOtelInstrumentation(e){let t=e.environment??resolveInstrumentationEnvironment(),n=e.recordInputs??!1,r=e.recordOutputs??!1,i=createEveTracing(e),a=new Map,o=new Map,s=createEveSessionTracing({...e,environment:t,tracing:i}),{prepareSessionTrace:c,prepareTurnTrace:l}=s;async function attemptFor(e){let t=a.get(e.attemptId);if(t!==void 0)return t;let n=await s.turnFor(e.sessionId,e.turnId,withChannelAudience(ROOT_CONTEXT,e.channelAudience)),r={stepIndex:e.stepIndex,attempt:e.attemptIndex};return n?.findAttempt(r)??(n?.finished===!1?n.attempt(r):void 0)}let u=createAgentToolInstrumentation({tracing:i,attemptFor,stepFor:e=>a.get(e.attemptId),recordInputs:n,recordOutputs:r,stateStore:e.stateStore}),d=createAgentApprovalInstrumentation({tracing:i,actionStateFor:u.stateFor}),f=createAgentMemoryInstrumentation({...e,environment:t,tracing:i}),p=createEveCapturePolicy({stateStore:e.stateStore,environment:t,recordInputs:n,recordOutputs:r});function turnState(t){return e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId]))}let onSessionStarted=async e=>{await c(e)},onTurnStarted=async e=>{await l(e)},onStepStarted=async t=>{let n=await turnState(t.scope);if(n===void 0||!isSampledTrace(n.context))return;let r=await e.stateStore.get(`session`,t.scope.sessionId),i=await s.turnFor(t.scope.sessionId,t.scope.turnId,withChannelAudience(ROOT_CONTEXT,t.scope.channelAudience));if(i===void 0||i.finished)return;let o=trace.getSpan(context.active())?.spanContext(),c=await i.attempt({stepIndex:t.scope.stepIndex,attempt:t.scope.attemptIndex,runtimeContext:t.runtimeContext,channel:eveActivationMetadata({session:r,turn:n,sessionId:t.scope.sessionId}).channel,links:o===void 0||o.traceId===n.context.traceId?void 0:[{relationship:`execution.delivery`,context:o}]});a.set(t.scope.attemptId,c)},onStepTerminal=async e=>{let t=e.type===`step.attempt.failed`?{error:e.error}:void 0;await drainOpenSpans(e),await u.drain(e.scope.attemptId,t);let n=a.get(e.scope.attemptId)??await attemptFor(e.scope);a.delete(e.scope.attemptId),t===void 0?await n?.complete():(await n?.fail(t.error),await u.forgetAttempt(e.scope))},onSessionTransition=async t=>{await s.sessionTransition(t),(t.type===`session.completed`||t.type===`session.failed`)&&(await u.deleteForSession(t.sessionId),await e.stateStore.delete(`session`,t.sessionId))},onModelCallStarted=async e=>{let t=a.get(e.scope.attemptId);if(t===void 0)return;let r=await t.modelCall({provider:e.model.provider,modelId:e.model.modelId,messages:n?e.input?.messages.map(e=>isObject(e)&&e.role===`user`?{...e,kind:isUserMessageKind(e.kind)?e.kind:void 0}:e):void 0,instructions:n?e.input?.instructions:void 0,tools:n?e.input?.tools:void 0,runtimeContext:e.runtimeContext},e.idempotencyKey),i=o.get(e.scope.attemptId);i===void 0&&o.set(e.scope.attemptId,i=new Map),i.set(e.idempotencyKey,r)},onModelCallTerminal=async e=>{let t=o.get(e.scope.attemptId),n=t?.get(e.idempotencyKey);t?.delete(e.idempotencyKey),n!==void 0&&(e.type===`model.call.failed`?await n.fail(e.error):await n.complete({outcome:`completed`,result:{...e,content:r?e.content:void 0}}))},m=createAgentChannelDeliveryInstrumentation({recordInputs:n,stateStore:e.stateStore}),onStepMetadata=e=>{let t=a.get(e.scope.attemptId);if(t===void 0)return;let n=readGatewayCostData(e.providerMetadata);n!==void 0&&t.attributes(gatewayCostAttributes(n))};return{hook:{events:{...m,...d,"step.attempt.completed":onStepTerminal,"step.attempt.failed":onStepTerminal,"step.attempt.metadata":onStepMetadata,"step.attempt.started":onStepStarted,"model.call.completed":onModelCallTerminal,"model.call.failed":onModelCallTerminal,"model.call.started":onModelCallStarted,"session.completed":onSessionTransition,"session.failed":onSessionTransition,"session.started":onSessionStarted,"session.waiting":onSessionTransition,...u.events,"turn.cancelled":s.turnTerminal,"turn.completed":s.turnTerminal,"turn.failed":s.turnTerminal,"turn.started":onTurnStarted},name:`eve.otel`,projectEvent:p.projectEvent,tracePolicy:()=>({emit:!0,recordInputs:n,recordOutputs:r})},prepareSessionTrace:c,prepareTurnTrace:l,async runInContext(t,n){if(t.type===`memory.operation`)return f.runInContext(t,n);let r={emit:!0,...await p.forOperation(t.scope)},inTurn=async()=>{let i=await s.turnFor(t.scope.sessionId,t.scope.turnId,withChannelAudience(ROOT_CONTEXT,t.scope.channelAudience));if(i!==void 0&&!i.finished)return i.run(n,r);let{sessionId:a,turnId:o}=t.scope;return e.telemetry.suppressed!==void 0&&await s.dropped(a,o)?e.telemetry.suppressed(n):n()};if(t.type===`tool.call`)return u.runInContext(t,n,r,inTurn);let i=o.get(t.scope.attemptId)?.get(t.idempotencyKey);return i!==void 0&&!i.finished?i.run(n,r):inTurn()}};async function drainOpenSpans(e){for(let t of o.get(e.scope.attemptId)?.values()??[])e.type===`step.attempt.failed`?await t.fail(e.error):await t.complete({outcome:`completed`,result:{finishReason:`unknown`,usage:{}}});o.delete(e.scope.attemptId)}}export{createAgentOtelInstrumentation};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type Context, type SpanContext } from "#compiled/@opentelemetry/api/index.js";
|
|
2
|
+
import type { InstrumentationAttemptScope, InstrumentationExecutionOperation, InstrumentationToolCallStartedEvent, InstrumentationToolCallTerminalEvent } from "#instrumentation/lifecycle.js";
|
|
3
|
+
import type { AgentActionTraceState, AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
|
|
4
|
+
import type { AgentTracing, AttemptOperation, CaptureDecision, ToolOperation } from "#compiled/@eve/tracing/index.js";
|
|
5
|
+
export interface AgentToolContext {
|
|
6
|
+
readonly context: Context;
|
|
7
|
+
readonly spanContext: SpanContext;
|
|
8
|
+
}
|
|
9
|
+
type ToolExecution = Extract<InstrumentationExecutionOperation, {
|
|
10
|
+
type: "tool.call";
|
|
11
|
+
}>;
|
|
12
|
+
/** Finds an open tool call in its turn's trace tree, in this or a later process. */
|
|
13
|
+
export declare function resumeTool(tracing: AgentTracing, state: AgentActionTraceState): Promise<ToolOperation | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* One `execute_tool` span per call. eve's tool loop reports the durable
|
|
16
|
+
* dispatch through `tool.call.*` events; the SDK reports the run through the
|
|
17
|
+
* execution context. Both name the same call ID, so they share one span. A run
|
|
18
|
+
* without a dispatch closes under its step when the step ends.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createAgentToolInstrumentation(input: {
|
|
21
|
+
readonly tracing: AgentTracing;
|
|
22
|
+
readonly attemptFor: (scope: InstrumentationAttemptScope) => Promise<AttemptOperation | undefined>;
|
|
23
|
+
readonly stepFor: (scope: InstrumentationAttemptScope) => AttemptOperation | undefined;
|
|
24
|
+
readonly recordInputs: boolean;
|
|
25
|
+
readonly recordOutputs: boolean;
|
|
26
|
+
readonly stateStore: AgentTraceStateStore;
|
|
27
|
+
}): {
|
|
28
|
+
stateFor: (sessionId: string, turnId: string, callId: string) => Promise<AgentActionTraceState | undefined>;
|
|
29
|
+
contextFor(sessionId: string, turnId: string, callId: string): Promise<AgentToolContext | undefined>;
|
|
30
|
+
deleteForSession(sessionId: string): Promise<void>;
|
|
31
|
+
forgetAttempt(scope: InstrumentationAttemptScope): Promise<void>;
|
|
32
|
+
/** Closes SDK runs that no dispatch claimed before their step ended. */
|
|
33
|
+
drain(attemptId: string, failure?: {
|
|
34
|
+
readonly error: unknown;
|
|
35
|
+
}): Promise<void>;
|
|
36
|
+
/** Runs the SDK's tool call inside its span, or calls `fallback` when it has none. */
|
|
37
|
+
runInContext<T>(operation: ToolExecution, execute: () => PromiseLike<T>, ceiling: CaptureDecision, fallback: () => Promise<T>): Promise<T>;
|
|
38
|
+
events: {
|
|
39
|
+
"tool.call.completed": (event: InstrumentationToolCallTerminalEvent) => Promise<void>;
|
|
40
|
+
"tool.call.failed": (event: InstrumentationToolCallTerminalEvent) => Promise<void>;
|
|
41
|
+
"tool.call.started": (event: InstrumentationToolCallStartedEvent) => Promise<void>;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{normalizeChannelAudience}from"#shared/channel-audience.js";import{ROOT_CONTEXT,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey}from"#instrumentation/lifecycle.js";import{withChannelAudience}from"#tracing/eve/channel-audience-context.js";import{eveTurnIdentity}from"#tracing/eve/operation-input.js";async function resumeTool(e,t){return(await e.resume({identity:eveTurnIdentity(t),context:withChannelAudience(ROOT_CONTEXT,t.channelAudience)}))?.findTool(t.callId)}function createAgentToolInstrumentation(e){let t=new Map,callKey=(e,t)=>actionIdempotencyKey(e.sessionId,e.turnId,t);async function stateFor(t,n,r){let i=await e.stateStore.get(`action`,actionIdempotencyKey(t,n,r));return i===void 0?(await e.stateStore.entries(`action`)).find(([,e])=>e.sessionId===t&&e.callId===r)?.[1]:i}async function reenter(t,n){let r=await e.tracing.resume({identity:eveTurnIdentity(t),context:withChannelAudience(ROOT_CONTEXT,t.channelAudience)});if(r?.findTool(t.callId)===void 0)return;let i=r.findAttempt({stepIndex:t.stepIndex,attempt:t.attemptIndex});return i===void 0?r.findTool(t.callId):i.tool(n)}async function settleExecution(n,r){let i=n.terminal;i!==void 0&&(t.delete(n.idempotencyKey),i.failed?n.tool.recordError(i.error):i.durationMs!==void 0&&n.tool.attributes({"gen_ai.execute_tool.duration":i.durationMs/1e3}),await e.stateStore.set(`action`,n.idempotencyKey,{...r,toolEndTimeMs:i.completedAtMs}))}async function onDispatchStarted(n){let r=await e.stateStore.get(`action`,n.idempotencyKey);if(r===void 0){let i=await e.attemptFor(n.scope);if(i===void 0)return;let a=await i.tool({callId:n.callId,name:n.toolName,kind:n.kind??`tool-call`,arguments:e.recordInputs?n.input:void 0,startTimeMs:n.startedAtMs});a.attributes({"agent.tool.is_framework":n.frameworkTool===!0}),r={attemptId:n.scope.attemptId,attemptIndex:n.scope.attemptIndex,callId:n.callId,channelAudience:normalizeChannelAudience(n.scope.channelAudience),context:{...a.reference,isRemote:!1},rootSessionId:n.scope.rootSessionId,sessionId:n.scope.sessionId,stepIndex:n.scope.stepIndex,turnId:n.scope.turnId},await e.stateStore.set(`action`,n.idempotencyKey,r);let o=t.get(n.idempotencyKey);o!==void 0&&await settleExecution(o,r)}n.isWorkflowTool===!0&&await e.stateStore.set(`anchor`,n.idempotencyKey,r)}async function onDispatchTerminal(t){let n=await e.stateStore.get(`action`,t.idempotencyKey);if(n!==void 0)try{let r=await resumeTool(e.tracing,n),i=t.type===`tool.call.failed`?t.error:t.output.type===`error`?t.output.error:void 0;await r?.complete({outcome:t.outcome??(t.type===`tool.call.failed`?`failed`:`completed`),failed:t.type===`tool.call.failed`||t.output.type===`error`,errorType:t.type===`tool.call.failed`?t.errorCode:void 0,error:i,output:e.recordOutputs&&t.type===`tool.call.completed`&&t.output.type===`result`?t.output.output:void 0,usage:t.usage,endTimeMs:t.acceptedAtMs??n.toolEndTimeMs})}finally{await e.stateStore.delete(`action`,t.idempotencyKey)}}async function executionFor(n,r){let i=callKey(n.scope,n.callId),a=t.get(i);if(a!==void 0)return a;let o=await stateFor(n.scope.sessionId,n.scope.turnId,n.callId),s={callId:n.callId,name:n.toolName,arguments:e.recordInputs&&r.recordInputs?n.input:void 0,startTimeMs:n.startedAtMs},c=o===void 0?await e.stepFor(n.scope)?.tool(s):await reenter(o,s);if(c===void 0||t.size>=1e4)return;let l={attemptId:n.scope.attemptId,idempotencyKey:i,tool:c};return t.set(i,l),l}async function finishExecution(t,n){t.terminal=n;let r=t.idempotencyKey,i=await e.stateStore.get(`action`,r);i!==void 0&&await settleExecution(t,i)}return{stateFor,async contextFor(e,t,n){let r=await stateFor(e,t,n);return r===void 0?void 0:toolContext(r)},async deleteForSession(t){for(let n of[`action`,`anchor`])for(let[r,i]of await e.stateStore.entries(n))i.sessionId===t&&await e.stateStore.delete(n,r)},async forgetAttempt(t){for(let[n,r]of await e.stateStore.entries(`action`))r.attemptId===t.attemptId&&await e.stateStore.delete(`action`,n)},async drain(n,r){for(let[i,a]of t){if(a.attemptId!==n||(t.delete(i),await e.stateStore.get(`action`,i)!==void 0))continue;let o=a.terminal;if(r!==void 0){await a.tool.fail(r.error);continue}o?.durationMs!==void 0&&!o.failed&&a.tool.attributes({"gen_ai.execute_tool.duration":o.durationMs/1e3}),await a.tool.complete({failed:o?.failed,error:o?.error,output:o?.output,endTimeMs:o?.completedAtMs})}},async runInContext(t,n,r,i){if(t.callId===void 0||t.toolName===void 0)return i();let a=await executionFor({...t,callId:t.callId,toolName:t.toolName},r);if(a===void 0||a.tool.finished)return i();a.tool.attributes({"agent.tool.is_framework":t.frameworkTool===!0});let o=t.startedAtMs??Date.now();try{let i=await a.tool.run(n,r),s=t.completedAtMs??Date.now();return await finishExecution(a,{completedAtMs:s,durationMs:s-o,failed:t.failed===!0,output:e.recordOutputs&&r.recordOutputs?i:void 0}),i}catch(e){throw await finishExecution(a,{completedAtMs:Date.now(),failed:!0,error:r.recordOutputs?e:void 0}),e}},events:{"tool.call.completed":onDispatchTerminal,"tool.call.failed":onDispatchTerminal,"tool.call.started":onDispatchStarted}}}function toolContext(e){return{context:withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e.context)),e.channelAudience),spanContext:e.context}}export{createAgentToolInstrumentation,resumeTool};
|
package/dist/src/tracing/{agent-trace-context-store.d.ts → eve/agent-trace-context-store.d.ts}
RENAMED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { SessionTraceContext } from "#channel/types.js";
|
|
2
2
|
import type { ContextAccessor } from "#context/key.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { AgentTraceStateStore, AgentTraceValues } from "#tracing/eve/agent-trace-state.js";
|
|
4
4
|
import type { SessionStateMap } from "#harness/types.js";
|
|
5
5
|
import type { InstrumentationDecision } from "#shared/instrumentation-decision.js";
|
|
6
|
+
export declare const AGENT_TRACE_CONTEXT_KEY = "eve.harness.agentTrace";
|
|
7
|
+
export declare function currentTraceSessionId(runId: string): string | undefined;
|
|
6
8
|
/** Run after task-provider commits, so a pending workflow tool call keeps its anchor. */
|
|
7
9
|
export declare function pruneAgentTraceState(context: ContextAccessor, sessionId: string, sessionState: SessionStateMap | undefined): void;
|
|
8
10
|
export declare function readSessionTraceDecision(context: ContextAccessor, sessionId: string): InstrumentationDecision | undefined;
|
|
@@ -14,19 +16,9 @@ export declare function readTurnTraceContext(serializedContext: Readonly<Record<
|
|
|
14
16
|
export declare function readActionTraceContext(serializedContext: Readonly<Record<string, unknown>>, sessionId: string, turnId: string, callId: string): SessionTraceContext | undefined;
|
|
15
17
|
/** Durable trace state backed by eve's serialized Workflow context. */
|
|
16
18
|
export declare class ContextAgentTraceStateStore implements AgentTraceStateStore {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
findAction(sessionId: string, callId: string): AgentActionTraceState | undefined;
|
|
23
|
-
findActionAnchor(sessionId: string, turnId: string, callId: string): AgentActionTraceState | undefined;
|
|
24
|
-
getAction(idempotencyKey: string): AgentActionTraceState | undefined;
|
|
25
|
-
getSession(sessionId: string): AgentSessionTraceState | undefined;
|
|
26
|
-
getTurn(sessionId: string, turnId: string): AgentTurnTraceState | undefined;
|
|
27
|
-
setAction(idempotencyKey: string, value: AgentActionTraceState): void;
|
|
28
|
-
setActionAnchor(idempotencyKey: string, value: AgentActionTraceState): void;
|
|
29
|
-
setSession(sessionId: string, value: AgentSessionTraceState): void;
|
|
30
|
-
setTurn(sessionId: string, turnId: string, value: AgentTurnTraceState): void;
|
|
31
|
-
updateTurn(sessionId: string, turnId: string, update: (state: AgentTurnTraceState) => AgentTurnTraceState): void;
|
|
19
|
+
get<K extends keyof AgentTraceValues>(kind: K, key: string): AgentTraceValues[K] | undefined;
|
|
20
|
+
set<K extends keyof AgentTraceValues>(kind: K, key: string, value: AgentTraceValues[K]): void;
|
|
21
|
+
delete(kind: keyof AgentTraceValues, key: string): void;
|
|
22
|
+
update<K extends keyof AgentTraceValues>(kind: K, key: string, update: (value: AgentTraceValues[K]) => AgentTraceValues[K]): void;
|
|
23
|
+
entries<K extends keyof AgentTraceValues>(kind: K): [string, AgentTraceValues[K]][];
|
|
32
24
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{decisionToTraceContentCeiling,resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{contextStorage,loadContext}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{parseJsonObject}from"#shared/json.js";import{ContextKey}from"#context/key.js";import{getBlockingWorkflowToolRuns}from"#harness/workflow-tool-runs.js";import{actionIdempotencyKey}from"#instrumentation/lifecycle.js";const AGENT_TRACE_CONTEXT_KEY=`eve.harness.agentTrace`,traceStateKey=(e,t)=>JSON.stringify([e,t]);function traceStateValue(e,t,n){return e?.entries[traceStateKey(t,n)]?.value}const emptyAgentTraceContextState=()=>({entries:{}});function deserializeAgentTraceContextState(e){try{let t=parseJsonObject(e);if(typeof t.entries!=`object`||t.entries===null||Array.isArray(t.entries))return emptyAgentTraceContextState();let n={};for(let[e,r]of Object.entries(t.entries)){if(typeof r!=`object`||!r||Array.isArray(r))continue;let t=r;(t.kind===`session`||t.kind===`turn`||t.kind===`checkpoint`||t.kind===`action`)&&(t.value===null||typeof t.value!=`object`||Array.isArray(t.value)||(n[e]=r))}return{entries:n}}catch{return emptyAgentTraceContextState()}}const AgentTraceContextKey=new ContextKey(AGENT_TRACE_CONTEXT_KEY,{codec:{deserialize:deserializeAgentTraceContextState,serialize:e=>e}});function currentTraceSessionId(e){return traceStateValue(contextStorage.getStore()?.get(AgentTraceContextKey),`session`,e)?.traceSessionId}function pruneAgentTraceState(e,t,n){try{pruneTraceOwnership(e,t,n)}catch(e){createLogger(`tracing.retention`).warn(`could not reconcile trace ownership; preserving trace state`,{error:e})}}function pruneTraceOwnership(e,t,n){let r=e.get(AgentTraceContextKey);if(r===void 0)return;let i=new Set(getBlockingWorkflowToolRuns(n).map(e=>e.callId)),a=Object.fromEntries(Object.entries(r.entries).filter(([,e])=>e.kind!==`action`||e.value.sessionId!==t||e.active||i.has(e.value.callId)));e.set(AgentTraceContextKey,{...r,entries:a})}function readSessionTraceDecision(e,t){return traceStateValue(e.get(AgentTraceContextKey),`session`,t)?.decision}function preserveSerializedAgentTraceState(e,t){let n=t[AgentTraceContextKey.name];return n===void 0?e:{...e,[AgentTraceContextKey.name]:n}}function readTurnTraceContext(e,t,n){let r=e[AgentTraceContextKey.name];if(r===void 0)return;let i=deserializeAgentTraceContextState(r),a=traceStateValue(i,`turn`,JSON.stringify([t,n]));return a===void 0?void 0:withTraceDecision(e,a.context,traceStateValue(i,`session`,t)?.decision)}function readActionTraceContext(e,t,n,r){let i=e[AgentTraceContextKey.name];if(i===void 0)return;let a=deserializeAgentTraceContextState(i),o=traceStateValue(a,`action`,actionIdempotencyKey(t,n,r));if(o!==void 0)return withTraceDecision(e,{...o.context,isRemote:!1},traceStateValue(a,`session`,o.sessionId)?.decision)}function withTraceDecision(e,t,n){let r=e[SessionTraceSeedKey.name],i=resolveForwardedTraceSeed({decision:n??r?.decision,forwardedTracePolicy:r?.forwardedTracePolicy,traceFlags:t.traceFlags}),a=i.decision,o=i.forwardedTracePolicy,s=decisionToTraceContentCeiling(a),c={...t,traceFlags:i.traceFlags};if(o===void 0)return a===void 0?c:{...c,decision:a};let l=s===void 0?o:{...o,ceiling:s};return a===void 0?{...c,forwardedTracePolicy:l}:{...c,decision:a,forwardedTracePolicy:l}}var ContextAgentTraceStateStore=class{get(e,t){let n=contextStorage.getStore()?.get(AgentTraceContextKey)?.entries[traceStateKey(e===`anchor`?`action`:e,t)];if(!(n===void 0||n.kind===`action`&&!(e===`anchor`?n.retained:n.active)))return n.value}set(e,t,n){updateState(r=>{let i=traceStateKey(e===`anchor`?`action`:e,t),a=r.entries[i],o=e===`action`||e===`anchor`?{kind:`action`,value:n,active:e===`action`||a?.kind===`action`&&a.active,retained:e===`anchor`||a?.kind===`action`&&a.retained}:{kind:e,value:n};return{...r,entries:{...r.entries,[i]:o}}})}delete(e,t){updateState(n=>{let r=traceStateKey(e===`anchor`?`action`:e,t),i=n.entries[r],a={...n.entries};return i?.kind===`action`&&e===`action`&&i.retained?a[r]={...i,active:!1}:i?.kind===`action`&&e===`anchor`&&i.active?a[r]={...i,retained:!1}:delete a[r],{...n,entries:a}})}update(e,t,n){let r=this.get(e,t);r!==void 0&&this.set(e,t,n(r))}entries(e){return Object.entries(contextStorage.getStore()?.get(AgentTraceContextKey)?.entries??{}).flatMap(([t,n])=>n.kind===(e===`anchor`?`action`:e)&&(n.kind!==`action`||(e===`anchor`?n.retained:n.active))?[[JSON.parse(t)[1],n.value]]:[])}};function updateState(e){loadContext().set(AgentTraceContextKey,t=>e(t??emptyAgentTraceContextState()))}export{AGENT_TRACE_CONTEXT_KEY,ContextAgentTraceStateStore,currentTraceSessionId,preserveSerializedAgentTraceState,pruneAgentTraceState,readActionTraceContext,readSessionTraceDecision,readTurnTraceContext};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createContextKey}from"#compiled/@opentelemetry/api/index.js";import{activeTraceOperation}from"#compiled/@eve/tracing/otel.js";const AGENT_TRACE_KEY=createContextKey(`eve.agent.trace`);function isAgentTraceContext(e){if(typeof e!=`object`||!e)return!1;if(activeTraceOperation(e)!==void 0)return!0;let t=Reflect.get(e,`getValue`);return typeof t==`function`&&Reflect.apply(t,e,[AGENT_TRACE_KEY])===!0}function markAgentTraceContext(e){return e.setValue(AGENT_TRACE_KEY,!0)}export{isAgentTraceContext,markAgentTraceContext};
|