@arnilo/prism 0.7.0 → 0.9.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 +73 -0
- package/README.md +12 -11
- package/dist/agent-approval.d.ts +15 -2
- package/dist/agent-approval.js +5 -1
- package/dist/agent-event-source.d.ts +9 -1
- package/dist/agent-event-source.js +10 -3
- package/dist/agent-loops.js +7 -4
- package/dist/agent-run-lifecycle.d.ts +15 -1
- package/dist/agent-run-lifecycle.js +91 -10
- package/dist/agent-run-state.d.ts +34 -2
- package/dist/agent-run-state.js +68 -6
- package/dist/agent-session/helpers.js +20 -1
- package/dist/agent-session/session/assemble.js +250 -27
- package/dist/agent-session/session/persist.d.ts +27 -0
- package/dist/agent-session/session/persist.js +94 -12
- package/dist/agent-session/session/provider-round.d.ts +14 -4
- package/dist/agent-session/session/provider-round.js +197 -25
- package/dist/agent-session/session/tool-round.js +24 -2
- package/dist/agent-session/session/types.d.ts +36 -2
- package/dist/agent-session/session.d.ts +40 -4
- package/dist/agent-session/session.js +78 -5
- package/dist/attention-compiler.d.ts +51 -2
- package/dist/attention-compiler.js +282 -21
- package/dist/cache-helpers.d.ts +4 -2
- package/dist/cache-helpers.js +8 -6
- package/dist/checkpoint-restore.d.ts +45 -0
- package/dist/checkpoint-restore.js +54 -0
- package/dist/checkpoints.js +7 -11
- package/dist/context-budget.d.ts +2 -1
- package/dist/context-budget.js +24 -2
- package/dist/contracts-core/agent.d.ts +30 -0
- package/dist/contracts-core/attention.d.ts +95 -0
- package/dist/contracts-core/content.d.ts +15 -0
- package/dist/contracts-core/guardrail-packs.d.ts +41 -0
- package/dist/contracts-core/guardrail-packs.js +2 -0
- package/dist/contracts-core/loop.d.ts +42 -0
- package/dist/contracts-core/provider.d.ts +25 -0
- package/dist/contracts-core/run-limits.d.ts +21 -0
- package/dist/contracts-core/session.d.ts +23 -5
- package/dist/contracts-core/session.js +21 -2
- package/dist/contracts-core/usage.d.ts +40 -0
- package/dist/contracts-core/usage.js +8 -0
- package/dist/contracts-core.d.ts +2 -0
- package/dist/contracts-core.js +2 -0
- package/dist/contracts-protocol.d.ts +90 -4
- package/dist/contracts-run-state.d.ts +82 -6
- package/dist/evidence-grounding.d.ts +29 -0
- package/dist/evidence-grounding.js +162 -0
- package/dist/guardrail-packs/coding-standard.d.ts +3 -0
- package/dist/guardrail-packs/coding-standard.js +63 -0
- package/dist/guardrail-packs/destructive-commands.d.ts +3 -0
- package/dist/guardrail-packs/destructive-commands.js +46 -0
- package/dist/guardrail-packs/errors.d.ts +7 -0
- package/dist/guardrail-packs/errors.js +9 -0
- package/dist/guardrail-packs/index.d.ts +4 -0
- package/dist/guardrail-packs/index.js +15 -0
- package/dist/guardrail-packs/secrets-hygiene.d.ts +3 -0
- package/dist/guardrail-packs/secrets-hygiene.js +23 -0
- package/dist/guardrail-packs/types.d.ts +16 -0
- package/dist/guardrail-packs/types.js +2 -0
- package/dist/guardrail-packs/validation-respect.d.ts +3 -0
- package/dist/guardrail-packs/validation-respect.js +53 -0
- package/dist/guardrails.d.ts +20 -1
- package/dist/guardrails.js +268 -0
- package/dist/host-composition.d.ts +13 -0
- package/dist/host-composition.js +33 -2
- package/dist/index.d.ts +19 -10
- package/dist/index.js +11 -6
- package/dist/input.d.ts +8 -1
- package/dist/input.js +68 -6
- package/dist/middleware.d.ts +37 -2
- package/dist/middleware.js +41 -0
- package/dist/node/session-store-jsonl.js +18 -3
- package/dist/observability.js +6 -0
- package/dist/provider-events.d.ts +11 -3
- package/dist/provider-events.js +62 -4
- package/dist/providers/openai-compatible.js +6 -3
- package/dist/providers/transport.d.ts +3 -1
- package/dist/providers/transport.js +36 -0
- package/dist/redaction.js +18 -2
- package/dist/run-bundle.d.ts +89 -0
- package/dist/run-bundle.js +150 -0
- package/dist/run-limits.d.ts +11 -1
- package/dist/run-limits.js +46 -0
- package/dist/session-stores.d.ts +12 -1
- package/dist/session-stores.js +21 -4
- package/dist/testing/agent-event-source-conformance.js +41 -2
- package/dist/testing/prefix-stability-conformance.d.ts +30 -0
- package/dist/testing/prefix-stability-conformance.js +104 -0
- package/dist/testing/session-store-conformance.d.ts +3 -2
- package/dist/testing/session-store-conformance.js +48 -0
- package/dist/testing/state-concurrency-conformance.js +5 -12
- package/dist/tools.d.ts +5 -0
- package/dist/tools.js +11 -3
- package/dist/usage-estimation.d.ts +29 -0
- package/dist/usage-estimation.js +79 -0
- package/docs/ag-ui.md +5 -0
- package/docs/agent-events.md +68 -1
- package/docs/agent-loops.md +33 -0
- package/docs/agent-session-runtime.md +5 -3
- package/docs/attention-compiler.md +89 -8
- package/docs/coding-agent-tools.md +1 -1
- package/docs/coding-security.md +1 -0
- package/docs/coding-tools.md +0 -1
- package/docs/compaction-and-retry.md +1 -1
- package/docs/compaction-observational-memory.md +34 -7
- package/docs/connected-apps.md +116 -0
- package/docs/context-and-skills.md +13 -0
- package/docs/core.md +1 -1
- package/docs/diagrams.md +6 -6
- package/docs/document-reader.md +9 -9
- package/docs/documents.md +32 -11
- package/docs/durable-runs.md +129 -0
- package/docs/embeddings.md +5 -0
- package/docs/enterprise-postgres-state.md +4 -0
- package/docs/evaluations.md +5 -0
- package/docs/execution-timeline.md +84 -1
- package/docs/guardrails.md +71 -2
- package/docs/history/079-messaging-primitive-review.md +391 -0
- package/docs/history/080-messaging-followon-primitive-review.md +234 -0
- package/docs/history/081-connected-apps-primitive-review.md +74 -0
- package/docs/history/083-prism-work-primitive-review.md +84 -0
- package/docs/history/084-primitive-review.md +96 -0
- package/docs/history/085-honesty-and-cut-primitive-review.md +91 -0
- package/docs/history/README.md +5 -0
- package/docs/history/release-handoffs.md +38 -0
- package/docs/host-compositions.md +8 -6
- package/docs/host-security.md +2 -2
- package/docs/index.md +66 -29
- package/docs/input-and-prompt-assembly.md +3 -3
- package/docs/knowledge-sync.md +4 -0
- package/docs/live-testing.md +5 -3
- package/docs/mcp-tools.md +1 -0
- package/docs/messaging-channel-operations.md +166 -0
- package/docs/messaging-channels.md +150 -0
- package/docs/middleware-hooks.md +38 -2
- package/docs/migrate-to-0.8.md +124 -0
- package/docs/migrate-to-0.9.md +210 -0
- package/docs/migration.md +43 -0
- package/docs/model-registry.md +12 -2
- package/docs/multi-agent-patterns.md +25 -2
- package/docs/node-jsonl-session-store.md +7 -1
- package/docs/observability.md +7 -3
- package/docs/openapi-tools.md +1 -1
- package/docs/operations.md +1 -3
- package/docs/options-index.md +36 -3
- package/docs/peer-dependencies.md +6 -6
- package/docs/policy-and-audit.md +13 -1
- package/docs/postgres-persistence.md +1 -1
- package/docs/prefix-stability-conformance.md +93 -0
- package/docs/provider-caching.md +4 -4
- package/docs/provider-conformance.md +16 -0
- package/docs/provider-layer.md +2 -2
- package/docs/provider-packages.md +20 -20
- package/docs/providers/neuralwatt.md +5 -1
- package/docs/public-contracts.md +2 -2
- package/docs/rag.md +102 -4
- package/docs/release-and-install.md +55 -47
- package/docs/run-bundle.md +92 -0
- package/docs/runs-and-usage.md +57 -6
- package/docs/scoped-agent-memory.md +262 -0
- package/docs/server.md +2 -0
- package/docs/session-store-conformance.md +1 -2
- package/docs/session-stores.md +17 -17
- package/docs/sheets.md +9 -9
- package/docs/signal-channel.md +112 -0
- package/docs/speech.md +5 -1
- package/docs/sqlite-persistence.md +1 -1
- package/docs/supervisors.md +32 -12
- package/docs/telegram-channel.md +157 -0
- package/docs/testing.md +2 -2
- package/docs/tools.md +17 -0
- package/docs/wiki.md +1 -1
- package/docs/work-artifacts-and-review.md +1 -1
- package/docs/work-connectors.md +9 -9
- package/docs/work-sandbox.md +115 -0
- package/docs/work-tools.md +38 -16
- package/docs/workflows.md +5 -0
- package/package.json +9 -3
- package/templates/business-worker/manifest.json +2 -1
- package/templates/business-worker/src/agent.ts.tmpl +1 -1
- package/templates/business-worker/src/tests/agent.test.ts.tmpl +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
export { resolveAgentDefinition } from "./agent-definitions.js";
|
|
2
2
|
export type { AgentEventSourceErrorCode } from "./agent-event-source.js";
|
|
3
|
-
export { AgentEventSourceError, createMemoryAgentEventSource } from "./agent-event-source.js";
|
|
3
|
+
export { AgentEventSourceError, createMemoryAgentEventSource, isTerminalAgentEventType } from "./agent-event-source.js";
|
|
4
4
|
export { dispatchToolCallsInOrder, generateValidateReviseLoop, isAgentLoopOptions, resolveLoop, resolveToolConcurrency, singleShotLoop, } from "./agent-loops.js";
|
|
5
5
|
export type { AgentRunLifecycle, AgentRunLifecycleAgent, AgentRunLifecycleOptions, AgentRunLifecycleRequest, AgentRunLifecycleStreamRequest, } from "./agent-run-lifecycle.js";
|
|
6
6
|
export { createAgentRunLifecycle } from "./agent-run-lifecycle.js";
|
|
7
|
+
export type { CheckpointRestoreAudit, CheckpointRestoreAuditEntry, CheckpointRestoreHook, RunCheckpointRestoreHooksOptions, } from "./checkpoint-restore.js";
|
|
8
|
+
export { CheckpointRestoreError, DEFAULT_CHECKPOINT_RESTORE_TIMEOUT_MS, runCheckpointRestoreHooks } from "./checkpoint-restore.js";
|
|
7
9
|
export type { PendingToolCall, StoredAgentRunState } from "./agent-run-state.js";
|
|
8
|
-
export { AGENT_RUN_STATE_NAMESPACE, AGENT_RUN_STATE_SCHEMA_VERSION, agentFingerprint, DEFAULT_MAX_AGENT_RUN_STATE_BYTES, HARD_MAX_AGENT_RUN_STATE_BYTES, loadAgentRunState, } from "./agent-run-state.js";
|
|
10
|
+
export { AGENT_RUN_STATE_NAMESPACE, AGENT_RUN_STATE_SCHEMA_VERSION, agentFingerprint, boundCheckpointMetadata, DEFAULT_MAX_AGENT_RUN_STATE_BYTES, HARD_MAX_AGENT_RUN_STATE_BYTES, loadAgentRunState, MAX_AGENT_RUN_METADATA_BYTES, readCheckpointMetadata, resolveCheckpointMetadata, } from "./agent-run-state.js";
|
|
9
11
|
export { createAgent, createAgentSession, resumeAgentRun, resumeAgentRunStream } from "./agents.js";
|
|
10
12
|
export type { ArtifactApproval, ArtifactApprovalState, ArtifactBodyErrorCode, ArtifactBodyPresignOptions, ArtifactBodyRef, ArtifactBodyStore, ArtifactBodyTransferOptions, ArtifactCitation, ArtifactDecisionState, ArtifactDeliveryToken, ArtifactRecord, ArtifactRevision, CitationIntegrityReason, CitationIntegrityResult, CitationLiveSource, CitationSupport, } from "./artifacts.js";
|
|
11
13
|
export { ARTIFACT_BODY_ERROR_CODES, ARTIFACT_CHECKPOINT_NAMESPACE, ArtifactBodyStoreError, ArtifactError, approvalEvidenceIntact, artifactApprovalState, artifactCheckpointKey, checkCitationIntegrity, citationBindingDigest, HARD_CITATION_EXCERPT_BYTES, } from "./artifacts.js";
|
|
12
|
-
export { ATTENTION_BUDGET_ERROR_CODE, AttentionBudgetError, createAttentionCompiler, createAttentionTruncationTrigger, DEFAULT_ATTENTION_COMPACT_RATIO, DEFAULT_ATTENTION_KEEP_LAST, DEFAULT_ATTENTION_RESERVE_TOKENS, DEFAULT_ATTENTION_THINKING_KEEP_TURNS, DEFAULT_ATTENTION_TRIGGER_RATIO, DEFAULT_ATTENTION_TRUNCATION_THRESHOLD, isAttentionBudgetError, resolveAttentionReserveTokens, resolveInputCap, resolveRunAttentionCompiler, } from "./attention-compiler.js";
|
|
13
14
|
export type { AttentionTruncationTrigger, AttentionTruncationTriggerOptions, PersistedAttentionStickyFrontier, } from "./attention-compiler.js";
|
|
15
|
+
export { ATTENTION_BUDGET_ERROR_CODE, AttentionBudgetError, createAttentionCompiler, createAttentionTruncationTrigger, DEFAULT_ATTENTION_COMPACT_RATIO, DEFAULT_ATTENTION_KEEP_LAST, DEFAULT_ATTENTION_RESERVE_TOKENS, DEFAULT_ATTENTION_THINKING_KEEP_TURNS, DEFAULT_ATTENTION_TRIGGER_RATIO, DEFAULT_ATTENTION_TRUNCATION_THRESHOLD, isAttentionBudgetError, resolveAttentionReserveTokens, resolveInputCap, resolveRunAttentionCompiler, } from "./attention-compiler.js";
|
|
14
16
|
export type { ApplyCacheControlOptions, CacheControlledContentBlock, CacheControlledMessage, CacheControlValue, CacheUsageReport, } from "./cache-helpers.js";
|
|
15
17
|
export { applyCacheControl, cacheHitRate, cacheSavings, cacheUsageReport, mapCacheRetention, resolveBreakpoint, sanitizeCacheKey, systemCacheControlField, } from "./cache-helpers.js";
|
|
16
18
|
export type { CacheTelemetry, CacheTelemetryOptions, CacheTelemetryReport, CacheTelemetrySample, } from "./cache-telemetry.js";
|
|
@@ -28,7 +30,7 @@ export { assertDeclaredMediaTypeMatches, assertMediaBlocksWithinBounds, assertMe
|
|
|
28
30
|
export type { ContextBudget, ContextBudgetMessageGroups, ContextBudgetOmission, ContextBudgetOmissionKind, ContextBudgetReport, TokenEstimator, } from "./context-budget.js";
|
|
29
31
|
export { applyContextBudget, CONTEXT_BUDGET_ERROR_CODE, CONTEXT_BUDGET_REPORT_METADATA_KEY, ContextBudgetError, DEFAULT_MAX_CONTEXT_BUDGET_OMISSIONS, estimateAssemblyTokens, estimateMessageBytes, estimateMessageTokens, estimateTextBytes, estimateTextTokens, getContextBudgetReport, HARD_MAX_CONTEXT_BUDGET_BYTES, HARD_MAX_CONTEXT_BUDGET_OMISSIONS, HARD_MAX_CONTEXT_BUDGET_TOKENS, isContextBudgetError, resolveContextBudget, } from "./context-budget.js";
|
|
30
32
|
export type * from "./contracts.js";
|
|
31
|
-
export type { ApprovalOutcome, AttentionCompiler, AttentionCompilerContext, AttentionCompilerOptions, AttentionCompilerSetting, AttentionInputCapOptions, AttentionReport, CompactionTrigger, CompactionTriggerContext, DecisionScope, NestedRunApproval, NestedRunOutcome, NestedRunRef, PendingDecision, PendingDecisionKind, ProviderResolver, RealtimeCaps, RealtimeEvent, RealtimeSession, RealtimeSessionFactory, RealtimeSessionOptions, ResolveShouldCompactInput, ResolveShouldCompactOptions, ResumeNestedRun, RunDecision, RunLimitCounters, RunLimitName, SecureAgentOptions, StickyDecision, ToolCallAuthority, ToolEffectClassifier, ToolEffectDeclaration, ToolEffectIdempotency, ToolEffectKey, ToolEffectKind, ToolEffectRecord, ToolEffectStatus, ToolEffectStore, ToolEffectTransition, ToolElicitationRequest, } from "./contracts.js";
|
|
33
|
+
export type { ApprovalOutcome, AttentionCompiler, AttentionCompilerContext, AttentionCompilerOptions, AttentionCompilerSetting, AttentionInputCapOptions, AttentionReport, CompactionTrigger, CompactionTriggerContext, ContextMeter, DecisionScope, ModelFamily, NestedRunApproval, NestedRunOutcome, NestedRunRef, PendingDecision, PendingDecisionKind, ProviderResolver, RealtimeCaps, RealtimeEvent, RealtimeSession, RealtimeSessionFactory, RealtimeSessionOptions, ResolveShouldCompactInput, ResolveShouldCompactOptions, ResumeNestedRun, RunDecision, RunLimitCounters, RunLimitName, SecureAgentOptions, StickyDecision, TokenEstimate, TokenEstimateConfidence, ToolCallAuthority, ToolEffectClassifier, ToolEffectDeclaration, ToolEffectIdempotency, ToolEffectKey, ToolEffectKind, ToolEffectRecord, ToolEffectStatus, ToolEffectStore, ToolEffectTransition, ToolElicitationRequest, } from "./contracts.js";
|
|
32
34
|
export { AgentDecisionError, AgentDelegationSuspendedError, AgentLoopStateError, AgentRunError, AgentRunStateError, assertBatchJobsSupported, assertCompactionTrigger, assertEmbeddingsSupported, assertImageGenerationSupported, assertModerationSupported, assertSessionMetadataKey, assertSpeechSupported, assertTranscriptionSupported, assertVideoGenerationSupported, BatchJobsError, DEFAULT_MAX_PENDING_DECISIONS, DEFAULT_MAX_PENDING_STEER_BYTES, DEFAULT_MAX_PENDING_STEERS, DEFAULT_MAX_SESSION_SEARCH_CURSOR_BYTES, DEFAULT_MAX_SESSION_SEARCH_FTS_CANDIDATES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_BYTES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_ENTRIES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_SESSIONS, DEFAULT_MAX_SESSION_SEARCH_QUERY_BYTES, DEFAULT_MAX_SESSION_SEARCH_SNIPPET_BYTES, DEFAULT_MAX_STICKY_DECISIONS, DEFAULT_SESSION_SEARCH_LIMIT, DEFAULT_SNAPSHOT_CACHE_TTL_MS, EmbeddingsError, HARD_MAX_ACTION_CONSTRAINT_BYTES, HARD_MAX_ACTION_CONSTRAINTS, HARD_MAX_DECISION_REASON_BYTES, HARD_MAX_ELICITATION_BYTES, HARD_MAX_PENDING_DECISIONS, HARD_MAX_PENDING_STEER_BYTES, HARD_MAX_PENDING_STEERS, HARD_MAX_SESSION_SEARCH_CURSOR_BYTES, HARD_MAX_SESSION_SEARCH_FTS_CANDIDATES, HARD_MAX_SESSION_SEARCH_LIMIT, HARD_MAX_SESSION_SEARCH_LINEAR_BYTES, HARD_MAX_SESSION_SEARCH_LINEAR_ENTRIES, HARD_MAX_SESSION_SEARCH_LINEAR_SESSIONS, HARD_MAX_SESSION_SEARCH_QUERY_BYTES, HARD_MAX_SESSION_SEARCH_SNIPPET_BYTES, HARD_MAX_SNAPSHOT_CACHE_TTL_MS, HARD_MAX_STICKY_DECISIONS, ImageGenerationError, isBatchJobTerminal, isSessionAppendConflict, isSessionEntryKind, isSessionMetadataConflict, isSessionSearchUnsupported, MAX_ACTION_CONSTRAINT_BYTES, MAX_ACTION_CONSTRAINTS, MAX_ATTRIBUTION_DEPTH, MAX_DECISION_REASON_BYTES, MAX_ELICITATION_BYTES, ModerationError, modelSupportsBatchJobs, modelSupportsEmbeddings, modelSupportsImageGeneration, modelSupportsModeration, modelSupportsSpeech, modelSupportsTranscription, modelSupportsVideoGeneration, pollBatch, resolveSessionSearchQuery, resolveShouldCompact, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SESSION_METADATA_CONFLICT_CODE, SESSION_SEARCH_UNSUPPORTED_CODE, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SessionAppendConflictError, SessionMetadataConflictError, SessionSearchUnsupportedError, SpeechError, TranscriptionError, VideoGenerationError, } from "./contracts.js";
|
|
33
35
|
export { parseAgentFile, parseSkillFile } from "./contribution-parsing.js";
|
|
34
36
|
export type { ContributionRegistries, ContributionRegistriesOptions, ContributionRegistry, ContributionRegistryOptions, } from "./contributions.js";
|
|
@@ -43,6 +45,8 @@ export type { DeviceAdapter, DeviceAdmitRequest, DeviceChunkResult, DeviceConfor
|
|
|
43
45
|
export { acceptDeviceChunk, assertDeviceAdmit, DEFAULT_DEVICE_MAX_CHUNK_BYTES, DEFAULT_DEVICE_MAX_CONCURRENT_SESSIONS, DevicePolicyError, HARD_DEVICE_MAX_CHUNK_BYTES, HARD_DEVICE_MAX_CONCURRENT_SESSIONS, redactDeviceTelemetry, resolveDevicePolicy, runDevicePolicyConformance, } from "./devices.js";
|
|
44
46
|
export type { EventMultiplexer, EventMultiplexerOptions, EventOverflowInfo, EventOverflowPolicy } from "./event-multiplexer.js";
|
|
45
47
|
export { createEventMultiplexer, EVENT_MULTIPLEXER_SINGLE_CONSUMER_CODE, EventMultiplexerError } from "./event-multiplexer.js";
|
|
48
|
+
export type { ClaimGroundingEvidence, ClaimGroundingEvidenceExtractor, ClaimGroundingEvidenceExtractorContext, ClaimGroundingGuardrailOptions, } from "./evidence-grounding.js";
|
|
49
|
+
export { createClaimGroundingGuardrail } from "./evidence-grounding.js";
|
|
46
50
|
export type { ExecutionAction, ExecutionDecision, ExecutionPolicy, ExecutionRisk } from "./execution-policy.js";
|
|
47
51
|
export { applyExecutionDecision, assertExecutionAllowed, checkExecution, ExecutionDeniedError } from "./execution-policy.js";
|
|
48
52
|
export type { ActivatedKernelConfig, ExtensionErrorPolicy, ExtensionEventBus, ExtensionEventHandler, ExtensionKernel, ExtensionKernelOptions, ExtensionLoadPolicy, LoadedExtension, } from "./extensions.js";
|
|
@@ -51,8 +55,9 @@ export type { MemoryRunFeedbackStoreOptions, PrepareRunFeedbackOptions, RunFeedb
|
|
|
51
55
|
export { createMemoryRunFeedbackStore, prepareRunFeedback, RunFeedbackError, requireRunFeedbackOwnership, runFeedbackPageLimit, } from "./feedback.js";
|
|
52
56
|
export type { ApplyFieldPolicyOptions, AuditFieldRedaction, AuditFieldRedactorLike, AuditFieldRedactorOptions, FieldPolicy, FieldPolicyAction, FieldPolicyDecision, FieldPolicyInput, ProtectedFieldPolicyOptions, } from "./field-policy.js";
|
|
53
57
|
export { ALLOW_FIELD_POLICY, applyFieldPolicy, createAuditFieldRedactor, createProtectedFieldPolicy, FIELD_POLICY_LIMITS, FieldPolicyError, } from "./field-policy.js";
|
|
54
|
-
export type { GuardrailRunResult, RunGuardrailsOptions, } from "./guardrails.js";
|
|
55
|
-
export { assertGuardrailsAllowed, GuardrailError, MAX_GUARDRAIL_CONCURRENCY, runGuardrails } from "./guardrails.js";
|
|
58
|
+
export type { GuardrailPackRow, GuardrailRunResult, RunGuardrailsOptions, } from "./guardrails.js";
|
|
59
|
+
export { assertGuardrailsAllowed, compileGuardrailPacks, describeGuardrailPacks, GuardrailError, GuardrailPackError, MAX_GUARDRAIL_CONCURRENCY, MAX_GUARDRAIL_PACK_RULES, MAX_GUARDRAIL_PACKS, runGuardrails, } from "./guardrails.js";
|
|
60
|
+
export { BUILT_IN_GUARDRAIL_PACK_IDS } from "./guardrail-packs/index.js";
|
|
56
61
|
export type { AgentIdentity, AssertIdentityActiveOptions, IdentityLimits, IdentityVerifier, NarrowIdentityOptions, Principal, ResolvedIdentityLimits, } from "./identity.js";
|
|
57
62
|
export { assertIdentityActive, assertIdentityMatchesOwnership, assertIdentityPropagation, DEFAULT_IDENTITY_LIMITS, HARD_IDENTITY_LIMITS, IdentityError, identityTelemetryAttributes, narrowIdentity, ownershipFromIdentity, resolveIdentityLimits, resolveRunIdentity, } from "./identity.js";
|
|
58
63
|
export type { AgentInput, AssembleProviderInputOptions, DefaultInputBuildContext, DefaultInputBuilder, DefaultPromptBuilder, InputAttachment, PromptInstruction, PromptTemplateOptions, ResolveContextOptions, } from "./input.js";
|
|
@@ -62,8 +67,8 @@ export { resolveInstructionInjectors, runInstructionInjectors } from "./instruct
|
|
|
62
67
|
export { createMemoryLeaseStore, LEASE_CONFLICT_CODE, LeaseConflictError } from "./leases.js";
|
|
63
68
|
export type { ManifestContributionDeclaration, ManifestContributionKind, ManifestResourceDeclaration, PrismManifest } from "./manifests.js";
|
|
64
69
|
export { definePrismManifest, parsePrismManifest } from "./manifests.js";
|
|
65
|
-
export type { Middleware, MiddlewareHookName, MiddlewareNext, MiddlewareRegistry, MiddlewareRegistryOptions } from "./middleware.js";
|
|
66
|
-
export { createMiddlewareRegistry } from "./middleware.js";
|
|
70
|
+
export type { BeforeProviderTurnPayload, DeterministicTurnAnswer, DeterministicTurnProvenance, Middleware, MiddlewareHookName, MiddlewareNext, MiddlewareRegistry, MiddlewareRegistryOptions, } from "./middleware.js";
|
|
71
|
+
export { createMiddlewareRegistry, DeterministicTurnError } from "./middleware.js";
|
|
67
72
|
export type { MockProviderOptions } from "./mock-provider.js";
|
|
68
73
|
export { createMockProvider } from "./mock-provider.js";
|
|
69
74
|
export type { ModelRegistry, ModelRegistryOptions } from "./models.js";
|
|
@@ -73,7 +78,7 @@ export { createProviderTurnMetadata, readProviderHttpStatus } from "./observabil
|
|
|
73
78
|
export type { ApplyRetentionInput, ApplyRetentionResult, ConsumeTenantQuotaInput, ExportUnderHoldInput, LegalHoldExportItem, LegalHoldQuery, LegalHoldRecord, PersistenceLifecycleStore, PersistenceResourceKind, PutLegalHoldInput, ReleaseLegalHoldInput, SetTenantQuotaInput, TenantQuota, } from "./persistence-lifecycle.js";
|
|
74
79
|
export { createMemoryPersistenceLifecycle, DEFAULT_LIFECYCLE_PAGE_SIZE, DEFAULT_MAX_HOLD_REASON_BYTES, HARD_LIFECYCLE_PAGE_SIZE, HARD_MAX_HOLD_REASON_BYTES, isResourceHeld, PersistenceLifecycleError, } from "./persistence-lifecycle.js";
|
|
75
80
|
export { boundResponse, defaultResolver, isLoopbackAddress, isLoopbackHostname, normalizeHostname, type PinnedFetchOptions, pinnedFetch, raceAbort, requestPinned, resolvePinnedAddress, } from "./pinned-fetch.js";
|
|
76
|
-
export { providerContentDelta, providerContinuationRequired, providerDone, providerError, providerTextDelta, providerThinkingDelta, providerToolCall, providerToolCallDelta, providerUsage, toolCallContent, toolCallFromArgumentsText, } from "./provider-events.js";
|
|
81
|
+
export { mapProviderStopReason, providerContentDelta, providerContinuationRequired, providerDone, providerError, providerTextDelta, providerThinkingDelta, providerToolCall, providerToolCallDelta, providerUsage, toolCallContent, toolCallFromArgumentsText, } from "./provider-events.js";
|
|
77
82
|
export { authMethodKey, defineProviderPackage, systemPromptContributionKey } from "./provider-packages.js";
|
|
78
83
|
export type { ApplyDefaultProviderRequestOptionsContext, SessionCachePolicyOptions } from "./provider-request-policy.js";
|
|
79
84
|
export { applyDefaultProviderRequestOptions, createProviderRequestPolicyChain, createSessionCachePolicy, mergeProviderRequestOptions, ProviderRequirementError, } from "./provider-request-policy.js";
|
|
@@ -87,6 +92,8 @@ export type { LoadBinaryResourceOptions } from "./resources.js";
|
|
|
87
92
|
export { loadBinaryResource, loadJsonResource, loadManifestResource, loadTextResource } from "./resources.js";
|
|
88
93
|
export type { DefaultRetryPolicyOptions } from "./retry.js";
|
|
89
94
|
export { createDefaultRetryPolicy, isTransientErrorInfo, waitForRetry } from "./retry.js";
|
|
95
|
+
export type { RunBundleSnapshot, RunBundleSnapshotInput } from "./run-bundle.js";
|
|
96
|
+
export { RUN_BUNDLE_SCHEMA_VERSION, snapshotRunBundle } from "./run-bundle.js";
|
|
90
97
|
export type { BatchedRunLedgerOptions } from "./run-ledger.js";
|
|
91
98
|
export { createBatchedRunLedger, DEFAULT_LEDGER_BATCH_BYTES, DEFAULT_LEDGER_BATCH_DELAY_MS, DEFAULT_LEDGER_BATCH_ENTRIES, HARD_LEDGER_BATCH_BYTES, HARD_LEDGER_BATCH_DELAY_MS, HARD_LEDGER_BATCH_ENTRIES, isFlushableRunLedger, } from "./run-ledger.js";
|
|
92
99
|
export type { RunLimitTrackerOptions } from "./run-limits.js";
|
|
@@ -119,8 +126,10 @@ export { createActiveToolSet, createSearchToolsTool, createToolSearchIndex, crea
|
|
|
119
126
|
export type { DispatchToolCallOptions, ToolArgumentValidationError, ToolArgumentValidationResult, ToolArgumentValidator, ToolFilter, ToolFilterInput, ToolParameterValidatorOptions, ToolRegistryOptions, ToolValidator, } from "./tools.js";
|
|
120
127
|
export { createToolParameterValidator, createToolRegistry, dispatchToolCall, filterTools } from "./tools.js";
|
|
121
128
|
export { trimTrailingSlashes } from "./trim-trailing-slashes.js";
|
|
129
|
+
export type { ModelFamilyTokens } from "./usage-estimation.js";
|
|
130
|
+
export { MODEL_FAMILY_TOKENS, resolveModelFamily } from "./usage-estimation.js";
|
|
122
131
|
export type { ResolvedUseCaseModel, ResolveUseCaseModelInput, UseCaseModelBinding, } from "./use-case-model.js";
|
|
123
132
|
export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
|
|
124
133
|
export declare const name = "prism";
|
|
125
|
-
export declare const version = "0.
|
|
134
|
+
export declare const version = "0.9.0";
|
|
126
135
|
export declare const description = "Agent harness for AI providers, agents, sessions, and tools.";
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export { resolveAgentDefinition } from "./agent-definitions.js";
|
|
2
|
-
export { AgentEventSourceError, createMemoryAgentEventSource } from "./agent-event-source.js";
|
|
2
|
+
export { AgentEventSourceError, createMemoryAgentEventSource, isTerminalAgentEventType } from "./agent-event-source.js";
|
|
3
3
|
export { dispatchToolCallsInOrder, generateValidateReviseLoop, isAgentLoopOptions, resolveLoop, resolveToolConcurrency, singleShotLoop, } from "./agent-loops.js";
|
|
4
4
|
export { createAgentRunLifecycle } from "./agent-run-lifecycle.js";
|
|
5
|
-
export {
|
|
5
|
+
export { CheckpointRestoreError, DEFAULT_CHECKPOINT_RESTORE_TIMEOUT_MS, runCheckpointRestoreHooks } from "./checkpoint-restore.js";
|
|
6
|
+
export { AGENT_RUN_STATE_NAMESPACE, AGENT_RUN_STATE_SCHEMA_VERSION, agentFingerprint, boundCheckpointMetadata, DEFAULT_MAX_AGENT_RUN_STATE_BYTES, HARD_MAX_AGENT_RUN_STATE_BYTES, loadAgentRunState, MAX_AGENT_RUN_METADATA_BYTES, readCheckpointMetadata, resolveCheckpointMetadata, } from "./agent-run-state.js";
|
|
6
7
|
export { createAgent, createAgentSession, resumeAgentRun, resumeAgentRunStream } from "./agents.js";
|
|
7
8
|
export { ARTIFACT_BODY_ERROR_CODES, ARTIFACT_CHECKPOINT_NAMESPACE, ArtifactBodyStoreError, ArtifactError, approvalEvidenceIntact, artifactApprovalState, artifactCheckpointKey, checkCitationIntegrity, citationBindingDigest, HARD_CITATION_EXCERPT_BYTES, } from "./artifacts.js";
|
|
8
9
|
export { ATTENTION_BUDGET_ERROR_CODE, AttentionBudgetError, createAttentionCompiler, createAttentionTruncationTrigger, DEFAULT_ATTENTION_COMPACT_RATIO, DEFAULT_ATTENTION_KEEP_LAST, DEFAULT_ATTENTION_RESERVE_TOKENS, DEFAULT_ATTENTION_THINKING_KEEP_TURNS, DEFAULT_ATTENTION_TRIGGER_RATIO, DEFAULT_ATTENTION_TRUNCATION_THRESHOLD, isAttentionBudgetError, resolveAttentionReserveTokens, resolveInputCap, resolveRunAttentionCompiler, } from "./attention-compiler.js";
|
|
@@ -22,24 +23,26 @@ export { createChainedCredentialResolver, createEnvCredentialResolver, createExp
|
|
|
22
23
|
export { createDelegatedAgentStep, DelegatedAgentStepError, MAX_DELEGATED_AGENT_DURATION_MS, MAX_DELEGATED_AGENT_EVENT_BYTES, MAX_DELEGATED_AGENT_ID_BYTES, MAX_DELEGATED_AGENT_NAME_BYTES, MAX_DELEGATED_AGENT_STEP_INDEX, MAX_DELEGATED_AGENT_TOKEN_COUNT, } from "./delegated-agent-step.js";
|
|
23
24
|
export { acceptDeviceChunk, assertDeviceAdmit, DEFAULT_DEVICE_MAX_CHUNK_BYTES, DEFAULT_DEVICE_MAX_CONCURRENT_SESSIONS, DevicePolicyError, HARD_DEVICE_MAX_CHUNK_BYTES, HARD_DEVICE_MAX_CONCURRENT_SESSIONS, redactDeviceTelemetry, resolveDevicePolicy, runDevicePolicyConformance, } from "./devices.js";
|
|
24
25
|
export { createEventMultiplexer, EVENT_MULTIPLEXER_SINGLE_CONSUMER_CODE, EventMultiplexerError } from "./event-multiplexer.js";
|
|
26
|
+
export { createClaimGroundingGuardrail } from "./evidence-grounding.js";
|
|
25
27
|
export { applyExecutionDecision, assertExecutionAllowed, checkExecution, ExecutionDeniedError } from "./execution-policy.js";
|
|
26
28
|
export { activateKernel, createExtensionEventBus, createExtensionKernel } from "./extensions.js";
|
|
27
29
|
export { createMemoryRunFeedbackStore, prepareRunFeedback, RunFeedbackError, requireRunFeedbackOwnership, runFeedbackPageLimit, } from "./feedback.js";
|
|
28
30
|
export { ALLOW_FIELD_POLICY, applyFieldPolicy, createAuditFieldRedactor, createProtectedFieldPolicy, FIELD_POLICY_LIMITS, FieldPolicyError, } from "./field-policy.js";
|
|
29
|
-
export { assertGuardrailsAllowed, GuardrailError, MAX_GUARDRAIL_CONCURRENCY, runGuardrails } from "./guardrails.js";
|
|
31
|
+
export { assertGuardrailsAllowed, compileGuardrailPacks, describeGuardrailPacks, GuardrailError, GuardrailPackError, MAX_GUARDRAIL_CONCURRENCY, MAX_GUARDRAIL_PACK_RULES, MAX_GUARDRAIL_PACKS, runGuardrails, } from "./guardrails.js";
|
|
32
|
+
export { BUILT_IN_GUARDRAIL_PACK_IDS } from "./guardrail-packs/index.js";
|
|
30
33
|
export { assertIdentityActive, assertIdentityMatchesOwnership, assertIdentityPropagation, DEFAULT_IDENTITY_LIMITS, HARD_IDENTITY_LIMITS, IdentityError, identityTelemetryAttributes, narrowIdentity, ownershipFromIdentity, resolveIdentityLimits, resolveRunIdentity, } from "./identity.js";
|
|
31
34
|
export { assembleProviderInput, createDefaultInputBuilder, createDefaultPromptBuilder, EMPTY_TOOL_RESULT_TEXT, renderPromptTemplate, resolveContextProviders, } from "./input.js";
|
|
32
35
|
export { resolveInstructionInjectors, runInstructionInjectors } from "./instruction-injection.js";
|
|
33
36
|
export { createMemoryLeaseStore, LEASE_CONFLICT_CODE, LeaseConflictError } from "./leases.js";
|
|
34
37
|
export { definePrismManifest, parsePrismManifest } from "./manifests.js";
|
|
35
|
-
export { createMiddlewareRegistry } from "./middleware.js";
|
|
38
|
+
export { createMiddlewareRegistry, DeterministicTurnError } from "./middleware.js";
|
|
36
39
|
export { createMockProvider } from "./mock-provider.js";
|
|
37
40
|
export { createModelRegistry } from "./models.js";
|
|
38
41
|
export { abortableSleep, pollDeviceCodeToken, redactOAuthError, throwIfAborted, } from "./oauth-device-code.js";
|
|
39
42
|
export { createProviderTurnMetadata, readProviderHttpStatus } from "./observability.js";
|
|
40
43
|
export { createMemoryPersistenceLifecycle, DEFAULT_LIFECYCLE_PAGE_SIZE, DEFAULT_MAX_HOLD_REASON_BYTES, HARD_LIFECYCLE_PAGE_SIZE, HARD_MAX_HOLD_REASON_BYTES, isResourceHeld, PersistenceLifecycleError, } from "./persistence-lifecycle.js";
|
|
41
44
|
export { boundResponse, defaultResolver, isLoopbackAddress, isLoopbackHostname, normalizeHostname, pinnedFetch, raceAbort, requestPinned, resolvePinnedAddress, } from "./pinned-fetch.js";
|
|
42
|
-
export { providerContentDelta, providerContinuationRequired, providerDone, providerError, providerTextDelta, providerThinkingDelta, providerToolCall, providerToolCallDelta, providerUsage, toolCallContent, toolCallFromArgumentsText, } from "./provider-events.js";
|
|
45
|
+
export { mapProviderStopReason, providerContentDelta, providerContinuationRequired, providerDone, providerError, providerTextDelta, providerThinkingDelta, providerToolCall, providerToolCallDelta, providerUsage, toolCallContent, toolCallFromArgumentsText, } from "./provider-events.js";
|
|
43
46
|
export { authMethodKey, defineProviderPackage, systemPromptContributionKey } from "./provider-packages.js";
|
|
44
47
|
export { applyDefaultProviderRequestOptions, createProviderRequestPolicyChain, createSessionCachePolicy, mergeProviderRequestOptions, ProviderRequirementError, } from "./provider-request-policy.js";
|
|
45
48
|
export { canonicalizeJsonSchema } from "./providers/schema.js";
|
|
@@ -47,6 +50,7 @@ export { createProviderRegistry, createProviderResolver } from "./providers.js";
|
|
|
47
50
|
export { createSecretRedactor, errorToErrorInfo, redactAgentEvent, redactMessage, redactProviderRequest, redactRunLedgerRecord, redactSecrets, redactSessionEntry, resolveRedactor, } from "./redaction.js";
|
|
48
51
|
export { loadBinaryResource, loadJsonResource, loadManifestResource, loadTextResource } from "./resources.js";
|
|
49
52
|
export { createDefaultRetryPolicy, isTransientErrorInfo, waitForRetry } from "./retry.js";
|
|
53
|
+
export { RUN_BUNDLE_SCHEMA_VERSION, snapshotRunBundle } from "./run-bundle.js";
|
|
50
54
|
export { createBatchedRunLedger, DEFAULT_LEDGER_BATCH_BYTES, DEFAULT_LEDGER_BATCH_DELAY_MS, DEFAULT_LEDGER_BATCH_ENTRIES, HARD_LEDGER_BATCH_BYTES, HARD_LEDGER_BATCH_DELAY_MS, HARD_LEDGER_BATCH_ENTRIES, isFlushableRunLedger, } from "./run-ledger.js";
|
|
51
55
|
export { createRunLimitTracker, DEFAULT_RUN_LIMITS, HARD_RUN_LIMITS, RunLimitError, RunLimitTracker, resolveRunLimits, } from "./run-limits.js";
|
|
52
56
|
export { assertHostCompositionReadiness, createSecureAgent, HostCompositionError, inspectHostComposition, } from "./secure-agent.js";
|
|
@@ -65,8 +69,9 @@ export { DEFAULT_TOOL_RESULT_FOLD_MAX_SUMMARY_BYTES, DEFAULT_TOOL_RESULT_FOLD_MI
|
|
|
65
69
|
export { createActiveToolSet, createSearchToolsTool, createToolSearchIndex, createToolSearchState, DEFAULT_MAX_TOOLS_SEARCH_QUERY_BYTES, DEFAULT_TOOLS_SEARCH_TOP_K, HARD_MAX_TOOLS_INDEX, HARD_MAX_TOOLS_SEARCH_QUERY_BYTES, HARD_MAX_TOOLS_SEARCH_TOP_K, isToolDisclosureError, resolveToolsDisclosure, SEARCH_TOOLS_TOOL_NAME, scoreTools, selectDisclosedTools, TOOL_DISCLOSURE_ERROR_CODE, ToolDisclosureError, } from "./tool-search.js";
|
|
66
70
|
export { createToolParameterValidator, createToolRegistry, dispatchToolCall, filterTools } from "./tools.js";
|
|
67
71
|
export { trimTrailingSlashes } from "./trim-trailing-slashes.js";
|
|
72
|
+
export { MODEL_FAMILY_TOKENS, resolveModelFamily } from "./usage-estimation.js";
|
|
68
73
|
export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
|
|
69
74
|
export const name = "prism";
|
|
70
|
-
export const version = "0.
|
|
75
|
+
export const version = "0.9.0";
|
|
71
76
|
export const description = "Agent harness for AI providers, agents, sessions, and tools.";
|
|
72
77
|
//# sourceMappingURL=index.js.map
|
package/dist/input.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AttentionStickyFrontier } from "./attention-compiler.js";
|
|
1
|
+
import { type AttentionFoldLedger, type AttentionStickyFrontier } from "./attention-compiler.js";
|
|
2
2
|
import { type ContextBudget } from "./context-budget.js";
|
|
3
3
|
import type { AttentionCompiler, AttentionCompilerOptions, AttentionReport, ContentBlock, ContextBlock, ContextProvider, ContextResolutionContext, InputBuildContext, InputBuilder, InstructionInjector, JsonObject, Message, ModelConfig, PromptBuilder, PromptBuildRequest, ProviderRequest, ProviderRequestOptions, ResourceLoader, Skill, ToolDefinition, ToolResult } from "./contracts.js";
|
|
4
4
|
import type { MiddlewareRegistry } from "./middleware.js";
|
|
@@ -65,6 +65,8 @@ export interface AssembleProviderInputOptions extends DefaultInputBuildContext {
|
|
|
65
65
|
readonly skills?: readonly Skill[];
|
|
66
66
|
readonly skillsDisclosure?: SkillsDisclosure;
|
|
67
67
|
readonly loadedSkills?: LoadedSkillSet;
|
|
68
|
+
/** Run-owned append-only segments. Omit outside a session to retain existing assembly exactly. */
|
|
69
|
+
readonly tailSegments?: Map<string, Message>;
|
|
68
70
|
readonly tools?: readonly ToolDefinition[];
|
|
69
71
|
/** Tools disclosure: "search" narrows the disclosed tool list (activated ∪ top-k); default "all" is unchanged. */
|
|
70
72
|
readonly toolsDisclosure?: ToolsDisclosure;
|
|
@@ -86,9 +88,14 @@ export interface AssembleProviderInputOptions extends DefaultInputBuildContext {
|
|
|
86
88
|
readonly attentionCompiler?: AttentionCompilerOptions | AttentionCompiler;
|
|
87
89
|
/** Per-session-leaf sticky frontier; omit for one-shot assemblies (no cross-turn stickiness). */
|
|
88
90
|
readonly attentionSticky?: AttentionStickyFrontier;
|
|
91
|
+
/** Per-session folded bodies; omit to re-summarize every folded row on every turn. */
|
|
92
|
+
readonly attentionFold?: AttentionFoldLedger;
|
|
89
93
|
/** Called once per *mutated* turn with the report, so a host can emit telemetry: under-ratio
|
|
90
94
|
* turns never call it, and it runs before `input_assembly` middleware. */
|
|
91
95
|
readonly onAttentionReport?: (report: AttentionReport) => void;
|
|
96
|
+
/** Run input tokens already charged this run; feeds the `run_input_ratio` axis projection
|
|
97
|
+
* (default 0). The run budget itself rides the resolved `AttentionCompiler` handle. */
|
|
98
|
+
readonly runInputTokens?: number;
|
|
92
99
|
}
|
|
93
100
|
export declare function createDefaultInputBuilder(): DefaultInputBuilder;
|
|
94
101
|
export declare function resolveContextProviders(options: ResolveContextOptions): Promise<readonly ContextBlock[]>;
|
package/dist/input.js
CHANGED
|
@@ -5,7 +5,7 @@ import { runInstructionInjectors } from "./instruction-injection.js";
|
|
|
5
5
|
import { applyDefaultProviderRequestOptions } from "./provider-request-policy.js";
|
|
6
6
|
import { redactMessage } from "./redaction.js";
|
|
7
7
|
import { loadTextResource } from "./resources.js";
|
|
8
|
-
import { skillMessages as buildSkillMessages } from "./skill-disclosure.js";
|
|
8
|
+
import { capSkillCatalog, selectSkillsForPrompt, skillHasRenderableBody, skillMessages as buildSkillMessages, } from "./skill-disclosure.js";
|
|
9
9
|
import { composeSystemPrompt } from "./system-prompts.js";
|
|
10
10
|
import { foldToolResultHistory, foldToolResults } from "./tool-result-fold.js";
|
|
11
11
|
import { selectDisclosedTools } from "./tool-search.js";
|
|
@@ -51,11 +51,16 @@ export function createDefaultPromptBuilder() {
|
|
|
51
51
|
// text-only (or unknown-capability) models — duplicating it doubles tool tokens per turn.
|
|
52
52
|
const tools = request.model?.capabilities?.tools === true ? undefined : request.tools;
|
|
53
53
|
const context = contextMessages(request.context);
|
|
54
|
-
const skills = buildSkillMessages(request.skills,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
const skills = buildSkillMessages(request.skills, request.tailSkillBodies
|
|
55
|
+
? {
|
|
56
|
+
disclosure: "progressive",
|
|
57
|
+
demotedBodies: request.demotedSkillBodies?.length ? new Set(request.demotedSkillBodies) : undefined,
|
|
58
|
+
}
|
|
59
|
+
: {
|
|
60
|
+
disclosure: request.skillsDisclosure,
|
|
61
|
+
loaded: request.loadedSkills,
|
|
62
|
+
demotedBodies: request.demotedSkillBodies?.length ? new Set(request.demotedSkillBodies) : undefined,
|
|
63
|
+
});
|
|
59
64
|
const declarations = toolMessages(tools);
|
|
60
65
|
if ((request.inputLayout ?? "cache_aware") === "legacy") {
|
|
61
66
|
return [...context, ...skills, ...declarations, ...request.messages];
|
|
@@ -156,9 +161,11 @@ export async function assembleProviderInput(options) {
|
|
|
156
161
|
tools,
|
|
157
162
|
fold: options.toolResultFold,
|
|
158
163
|
frontier: options.attentionSticky,
|
|
164
|
+
attentionFold: options.attentionFold,
|
|
159
165
|
redactor: options.redactor,
|
|
160
166
|
signal: options.signal,
|
|
161
167
|
turn,
|
|
168
|
+
runInputTokens: options.runInputTokens,
|
|
162
169
|
sessionId: options.sessionId,
|
|
163
170
|
runId: options.runId,
|
|
164
171
|
});
|
|
@@ -213,6 +220,14 @@ export async function assembleProviderInput(options) {
|
|
|
213
220
|
...baseContext,
|
|
214
221
|
});
|
|
215
222
|
}
|
|
223
|
+
const tailSegments = options.tailSegments;
|
|
224
|
+
const tailSkillBodies = tailSegments !== undefined;
|
|
225
|
+
if (tailSegments) {
|
|
226
|
+
const activeTailSegments = new Set();
|
|
227
|
+
messages = moveResourceMessagesToTail(messages, options, tailSegments, activeTailSegments);
|
|
228
|
+
appendSkillTailSegments(tailSegments, activeTailSegments, skills, options.skillsDisclosure, options.loadedSkills, demotedSkillBodies);
|
|
229
|
+
messages = [...messages, ...tailMessages(tailSegments, activeTailSegments)];
|
|
230
|
+
}
|
|
216
231
|
const promptBuilder = options.promptBuilder ?? createDefaultPromptBuilder();
|
|
217
232
|
const promptRequest = options.middleware
|
|
218
233
|
? await options.middleware.run("prompt_build", {
|
|
@@ -222,6 +237,7 @@ export async function assembleProviderInput(options) {
|
|
|
222
237
|
skills,
|
|
223
238
|
skillsDisclosure: options.skillsDisclosure,
|
|
224
239
|
loadedSkills: options.loadedSkills,
|
|
240
|
+
tailSkillBodies,
|
|
225
241
|
demotedSkillBodies,
|
|
226
242
|
tools,
|
|
227
243
|
metadata: options.metadata,
|
|
@@ -234,6 +250,7 @@ export async function assembleProviderInput(options) {
|
|
|
234
250
|
skills,
|
|
235
251
|
skillsDisclosure: options.skillsDisclosure,
|
|
236
252
|
loadedSkills: options.loadedSkills,
|
|
253
|
+
tailSkillBodies,
|
|
237
254
|
demotedSkillBodies,
|
|
238
255
|
tools,
|
|
239
256
|
metadata: options.metadata,
|
|
@@ -389,6 +406,51 @@ function textMessage(role, text, metadata) {
|
|
|
389
406
|
function contextMessages(context) {
|
|
390
407
|
return (context ?? []).map((block) => textMessage("system", `${block.title ? `${block.title}:\n` : "Context:\n"}${blockText(block)}`, block.metadata));
|
|
391
408
|
}
|
|
409
|
+
function moveResourceMessagesToTail(messages, options, tailSegments, activeTailSegments) {
|
|
410
|
+
const resourceUris = new Set([
|
|
411
|
+
...(options.resourceUris ?? []),
|
|
412
|
+
...(options.attachments ?? []).flatMap((attachment) => attachment.uri !== undefined && attachment.text === undefined && attachment.content === undefined ? [attachment.uri] : []),
|
|
413
|
+
]);
|
|
414
|
+
if (resourceUris.size === 0)
|
|
415
|
+
return messages;
|
|
416
|
+
return messages.filter((message) => {
|
|
417
|
+
const uri = message.metadata?.uri;
|
|
418
|
+
if (message.role !== "user" || typeof uri !== "string" || !resourceUris.has(uri))
|
|
419
|
+
return true;
|
|
420
|
+
appendTailSegment(tailSegments, activeTailSegments, `resource:${uri}`, message);
|
|
421
|
+
return false;
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
function appendSkillTailSegments(tailSegments, activeTailSegments, skills, disclosure, loaded, demotedSkillBodies) {
|
|
425
|
+
const renderContext = {
|
|
426
|
+
disclosure,
|
|
427
|
+
loaded,
|
|
428
|
+
demotedBodies: demotedSkillBodies?.length ? new Set(demotedSkillBodies) : undefined,
|
|
429
|
+
};
|
|
430
|
+
const selected = capSkillCatalog(selectSkillsForPrompt(skills ?? [], renderContext));
|
|
431
|
+
const byName = new Map(selected.map((skill) => [skill.name, skill]));
|
|
432
|
+
const ordered = disclosure === "eager"
|
|
433
|
+
? selected
|
|
434
|
+
: (loaded?.list() ?? []).flatMap((name) => {
|
|
435
|
+
const skill = byName.get(name);
|
|
436
|
+
return skill === undefined ? [] : [skill];
|
|
437
|
+
});
|
|
438
|
+
for (const skill of ordered) {
|
|
439
|
+
if (!skillHasRenderableBody(skill, renderContext))
|
|
440
|
+
continue;
|
|
441
|
+
const message = buildSkillMessages([skill], renderContext)[0];
|
|
442
|
+
if (message)
|
|
443
|
+
appendTailSegment(tailSegments, activeTailSegments, `skill:${skill.name}`, message);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
/** Map#set retains first-insertion order, so re-derivation replaces only this segment's bytes. */
|
|
447
|
+
function appendTailSegment(tailSegments, activeTailSegments, id, message) {
|
|
448
|
+
tailSegments.set(id, message);
|
|
449
|
+
activeTailSegments.add(id);
|
|
450
|
+
}
|
|
451
|
+
function tailMessages(tailSegments, activeTailSegments) {
|
|
452
|
+
return [...tailSegments].flatMap(([id, message]) => (activeTailSegments.has(id) ? [message] : []));
|
|
453
|
+
}
|
|
392
454
|
function toolMessages(tools) {
|
|
393
455
|
if (!tools?.length)
|
|
394
456
|
return [];
|
package/dist/middleware.d.ts
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
|
-
import type { ExtensionEvent } from "./contracts.js";
|
|
2
|
-
export type MiddlewareHookName = "provider_request" | "input_assembly" | "prompt_build" | "context" | "tool_call" | "tool_result" | "retry" | "compaction" | "session_start" | "session_shutdown";
|
|
1
|
+
import type { ContentBlock, ExtensionEvent } from "./contracts.js";
|
|
2
|
+
export type MiddlewareHookName = "beforeProviderTurn" | "provider_request" | "input_assembly" | "prompt_build" | "context" | "tool_call" | "tool_result" | "retry" | "compaction" | "session_start" | "session_shutdown";
|
|
3
|
+
/** Provenance of a host-answered turn (plan 096). An id, never free host code. */
|
|
4
|
+
export interface DeterministicTurnProvenance {
|
|
5
|
+
/** Answering middleware id; bounded, replay-stable, and auditable. */
|
|
6
|
+
readonly middleware: string;
|
|
7
|
+
}
|
|
8
|
+
/** Host middleware answer that completes a turn without any provider request (plan 096). */
|
|
9
|
+
export interface DeterministicTurnAnswer {
|
|
10
|
+
/** Assistant content with provider content-block shape; tool calls are rejected (no provider ran). */
|
|
11
|
+
readonly content: readonly ContentBlock[];
|
|
12
|
+
/** Mandatory: a deterministic turn can never masquerade as model output. */
|
|
13
|
+
readonly provenance: DeterministicTurnProvenance;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Payload for the `beforeProviderTurn` hook (plan 096). Host middleware sets `answer` to complete the
|
|
17
|
+
* turn deterministically; leaving it absent/undefined sends the turn to the provider as usual.
|
|
18
|
+
*/
|
|
19
|
+
export interface BeforeProviderTurnPayload {
|
|
20
|
+
readonly sessionId: string;
|
|
21
|
+
readonly runId: string;
|
|
22
|
+
readonly turn: number;
|
|
23
|
+
/** Concatenated text blocks of the latest user-role message in the assembled request. */
|
|
24
|
+
readonly userText: string;
|
|
25
|
+
/** Set by host middleware to answer without a provider call. */
|
|
26
|
+
readonly answer?: DeterministicTurnAnswer;
|
|
27
|
+
}
|
|
28
|
+
/** Host answered with a malformed deterministic turn. Fails the run closed — never falls through. */
|
|
29
|
+
export declare class DeterministicTurnError extends Error {
|
|
30
|
+
readonly code = "ERR_PRISM_DETERMINISTIC_TURN";
|
|
31
|
+
constructor(message: string);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Validate a host deterministic answer at the trust boundary: non-empty assistant-visible content and
|
|
35
|
+
* mandatory bounded provenance. Throws instead of degrading to a provider call.
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateDeterministicTurnAnswer(value: unknown): DeterministicTurnAnswer;
|
|
3
38
|
export type MiddlewareNext<T> = (value: T) => Promise<T>;
|
|
4
39
|
export type Middleware<T = unknown> = (value: T, next: MiddlewareNext<T>) => T | Promise<T>;
|
|
5
40
|
export interface MiddlewareRegistryOptions {
|
package/dist/middleware.js
CHANGED
|
@@ -1,4 +1,45 @@
|
|
|
1
1
|
import { errorToErrorInfo } from "./redaction.js";
|
|
2
|
+
/** Host answered with a malformed deterministic turn. Fails the run closed — never falls through. */
|
|
3
|
+
export class DeterministicTurnError extends Error {
|
|
4
|
+
code = "ERR_PRISM_DETERMINISTIC_TURN";
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "DeterministicTurnError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** Provenance ids stay ids: bounded, no whitespace or separators outside the id alphabet. */
|
|
11
|
+
const DETERMINISTIC_MIDDLEWARE_ID = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$/;
|
|
12
|
+
// Assistant-visible blocks only: a deterministic answer cannot smuggle tool execution/authority.
|
|
13
|
+
const DETERMINISTIC_BLOCK_TYPES = new Set(["text", "image", "audio", "file", "document", "video", "thinking"]);
|
|
14
|
+
/**
|
|
15
|
+
* Validate a host deterministic answer at the trust boundary: non-empty assistant-visible content and
|
|
16
|
+
* mandatory bounded provenance. Throws instead of degrading to a provider call.
|
|
17
|
+
*/
|
|
18
|
+
export function validateDeterministicTurnAnswer(value) {
|
|
19
|
+
if (typeof value !== "object" || value === null)
|
|
20
|
+
throw new DeterministicTurnError("answer must be an object");
|
|
21
|
+
const answer = value;
|
|
22
|
+
if (!Array.isArray(answer.content) || answer.content.length === 0) {
|
|
23
|
+
throw new DeterministicTurnError("answer.content must be a non-empty content block array");
|
|
24
|
+
}
|
|
25
|
+
for (const block of answer.content) {
|
|
26
|
+
const type = block?.type;
|
|
27
|
+
if (typeof block !== "object" || block === null || typeof type !== "string" || !DETERMINISTIC_BLOCK_TYPES.has(type)) {
|
|
28
|
+
throw new DeterministicTurnError("answer.content blocks must be assistant-visible content blocks (text, image, audio, file, document, video, thinking)");
|
|
29
|
+
}
|
|
30
|
+
if (type === "text" && typeof block.text !== "string") {
|
|
31
|
+
throw new DeterministicTurnError("answer.content text blocks require a string text");
|
|
32
|
+
}
|
|
33
|
+
if (type === "thinking" && typeof block.text !== "string") {
|
|
34
|
+
throw new DeterministicTurnError("answer.content thinking blocks require a string text");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const middleware = answer.provenance?.middleware;
|
|
38
|
+
if (typeof middleware !== "string" || !DETERMINISTIC_MIDDLEWARE_ID.test(middleware)) {
|
|
39
|
+
throw new DeterministicTurnError("answer.provenance.middleware must be a bounded id (1-64 chars: letters, digits, . _ : -)");
|
|
40
|
+
}
|
|
41
|
+
return { content: answer.content, provenance: { middleware } };
|
|
42
|
+
}
|
|
2
43
|
function middlewareError(error, hook, secrets) {
|
|
3
44
|
return { type: "extension_error", extension: `middleware:${hook}`, error: errorToErrorInfo(error, secrets) };
|
|
4
45
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { appendFile, mkdir, readFile } from "node:fs/promises";
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
|
-
import { isSessionEntryKind, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_SCHEMA_VERSION, SessionAppendConflictError,
|
|
3
|
+
import { isSessionEntryKind, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_SCHEMA_VERSION, SessionAppendConflictError, } from "../contracts.js";
|
|
4
|
+
import { searchLinearSessions } from "../session-stores.js";
|
|
4
5
|
import { isNodeErrorCode } from "./config.js";
|
|
5
6
|
export function createJsonlSessionStore(pathOrOptions) {
|
|
6
7
|
const options = typeof pathOrOptions === "string" ? { path: pathOrOptions, createDirectory: true } : pathOrOptions;
|
|
@@ -50,8 +51,22 @@ export function createJsonlSessionStore(pathOrOptions) {
|
|
|
50
51
|
async get(id) {
|
|
51
52
|
return findEntry(path, id);
|
|
52
53
|
},
|
|
53
|
-
async searchSessions() {
|
|
54
|
-
|
|
54
|
+
async searchSessions(query) {
|
|
55
|
+
// ponytail: no index - every search reads and parses the file (O(corpus) time and memory), the
|
|
56
|
+
// recommended indexed paths are the SQLite/Postgres adapters. Corrupt lines are quarantined
|
|
57
|
+
// exactly as in list()/get(), and the contract linear caps bound entries/text scanned.
|
|
58
|
+
const { entries } = await readJsonlSessionEntries(path);
|
|
59
|
+
const bySession = new Map();
|
|
60
|
+
const leafBySession = new Map();
|
|
61
|
+
for (const entry of entries) {
|
|
62
|
+
const sessionEntries = bySession.get(entry.sessionId);
|
|
63
|
+
if (sessionEntries)
|
|
64
|
+
sessionEntries.push(entry);
|
|
65
|
+
else
|
|
66
|
+
bySession.set(entry.sessionId, [entry]);
|
|
67
|
+
leafBySession.set(entry.sessionId, entry.id);
|
|
68
|
+
}
|
|
69
|
+
return searchLinearSessions(bySession, leafBySession, query);
|
|
55
70
|
},
|
|
56
71
|
};
|
|
57
72
|
}
|
package/dist/observability.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
export function createProviderTurnMetadata(request, providerId, fields = {}) {
|
|
3
|
+
const names = (request.tools ?? []).map((tool) => tool.name);
|
|
2
4
|
return {
|
|
3
5
|
providerId,
|
|
4
6
|
model: request.model,
|
|
5
7
|
requestId: readRequestId(request),
|
|
6
8
|
...fields,
|
|
9
|
+
tools: {
|
|
10
|
+
count: names.length,
|
|
11
|
+
idsHash: `sha256:${createHash("sha256").update(JSON.stringify(names), "utf8").digest("hex")}`,
|
|
12
|
+
},
|
|
7
13
|
};
|
|
8
14
|
}
|
|
9
15
|
export function readProviderHttpStatus(error) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ContentBlock, JsonObject, ProviderEvent, ToolCallContent, ToolCallDeltaContent, Usage } from "./contracts.js";
|
|
1
|
+
import type { ContentBlock, JsonObject, ProviderEvent, ProviderStopReason, ToolCallContent, ToolCallDeltaContent, Usage } from "./contracts.js";
|
|
2
2
|
export declare function providerTextDelta(text: string): ProviderEvent;
|
|
3
3
|
export declare function providerThinkingDelta(text: string, signature?: string): ProviderEvent;
|
|
4
4
|
export declare function providerContentDelta(content: ContentBlock): ProviderEvent;
|
|
@@ -13,8 +13,16 @@ export declare function providerToolCallDeltaContent(delta: Omit<ToolCallDeltaCo
|
|
|
13
13
|
export declare function providerContinuationRequired(cursor: string, reason?: string): ProviderEvent;
|
|
14
14
|
export declare function reconstructToolCallDeltas(events: readonly ProviderEvent[]): readonly ToolCallContent[];
|
|
15
15
|
export declare function providerUsage(usage: Usage): ProviderEvent;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Map a native provider stop/finish reason onto the closed taxonomy. A missing, non-string, or
|
|
18
|
+
* unmapped value returns `"unknown"` rather than throwing, so a new wire value can never fail a
|
|
19
|
+
* run (plan 087 T1).
|
|
20
|
+
*/
|
|
21
|
+
export declare function mapProviderStopReason(native: string | null | undefined): ProviderStopReason;
|
|
22
|
+
export declare function providerDone(usage?: Usage, stopReason?: ProviderStopReason): ProviderEvent;
|
|
23
|
+
export declare function providerError(error: unknown, secrets?: readonly (string | undefined)[]): Extract<ProviderEvent, {
|
|
24
|
+
type: "error";
|
|
25
|
+
}>;
|
|
18
26
|
export declare function toolCallContent(id: string, name: string, args?: JsonObject): ToolCallContent;
|
|
19
27
|
/** Build a tool call from streamed arguments text; malformed JSON becomes a blocked call (no throw). */
|
|
20
28
|
export declare function toolCallFromArgumentsText(id: string, name: string, argumentsText: string): ToolCallContent;
|
package/dist/provider-events.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ProviderTransportError, tryParseJsonObjectArguments } from "./providers/transport.js";
|
|
1
|
+
import { classifyProviderFailure, ProviderTransportError, tryParseJsonObjectArguments } from "./providers/transport.js";
|
|
2
2
|
import { errorToErrorInfo } from "./redaction.js";
|
|
3
3
|
export function providerTextDelta(text) {
|
|
4
4
|
return { type: "content_delta", content: { type: "text", text } };
|
|
@@ -46,12 +46,70 @@ export function reconstructToolCallDeltas(events) {
|
|
|
46
46
|
export function providerUsage(usage) {
|
|
47
47
|
return { type: "usage", usage };
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
/**
|
|
50
|
+
* One shared native → taxonomy table (plan 087 T1). Every adapter routes its wire reason
|
|
51
|
+
* through `mapProviderStopReason`, so hosts switch on one closed union instead of per-provider
|
|
52
|
+
* strings. Keys are lowercased wire values; `unknown` never appears here — it is the fallback.
|
|
53
|
+
*/
|
|
54
|
+
const PROVIDER_STOP_REASONS = Object.freeze({
|
|
55
|
+
// OpenAI Chat Completions (`finish_reason`) and generic OpenAI-compatible routes.
|
|
56
|
+
stop: "end_turn",
|
|
57
|
+
length: "max_output_tokens",
|
|
58
|
+
tool_calls: "tool_calls",
|
|
59
|
+
function_call: "tool_calls",
|
|
60
|
+
content_filter: "content_filter",
|
|
61
|
+
// Messages-style `stop_reason` routes and Bedrock Converse (`stopReason`).
|
|
62
|
+
end_turn: "end_turn",
|
|
63
|
+
stop_sequence: "end_turn",
|
|
64
|
+
pause_turn: "end_turn",
|
|
65
|
+
tool_use: "tool_calls",
|
|
66
|
+
max_tokens: "max_output_tokens",
|
|
67
|
+
refusal: "content_filter",
|
|
68
|
+
// Google generateContent (`finishReason`).
|
|
69
|
+
safety: "content_filter",
|
|
70
|
+
recitation: "content_filter",
|
|
71
|
+
blocklist: "content_filter",
|
|
72
|
+
prohibited_content: "content_filter",
|
|
73
|
+
spii: "content_filter",
|
|
74
|
+
image_safety: "content_filter",
|
|
75
|
+
language: "content_filter",
|
|
76
|
+
malformed_function_call: "provider_error",
|
|
77
|
+
unexpected_tool_call: "provider_error",
|
|
78
|
+
// OpenAI Responses (status / `incomplete_details.reason`).
|
|
79
|
+
completed: "end_turn",
|
|
80
|
+
failed: "provider_error",
|
|
81
|
+
cancelled: "abort",
|
|
82
|
+
canceled: "abort",
|
|
83
|
+
// Bedrock Converse guarded routes.
|
|
84
|
+
content_filtered: "content_filter",
|
|
85
|
+
guardrail_intervened: "content_filter",
|
|
86
|
+
malformed_model_output: "provider_error",
|
|
87
|
+
malformed_tool_use: "provider_error",
|
|
88
|
+
// AI SDK unified finish reasons (hyphenated).
|
|
89
|
+
"content-filter": "content_filter",
|
|
90
|
+
"tool-calls": "tool_calls",
|
|
91
|
+
error: "provider_error",
|
|
92
|
+
other: "unknown",
|
|
93
|
+
unknown: "unknown",
|
|
94
|
+
abort: "abort",
|
|
95
|
+
aborted: "abort",
|
|
96
|
+
});
|
|
97
|
+
/**
|
|
98
|
+
* Map a native provider stop/finish reason onto the closed taxonomy. A missing, non-string, or
|
|
99
|
+
* unmapped value returns `"unknown"` rather than throwing, so a new wire value can never fail a
|
|
100
|
+
* run (plan 087 T1).
|
|
101
|
+
*/
|
|
102
|
+
export function mapProviderStopReason(native) {
|
|
103
|
+
if (typeof native !== "string")
|
|
104
|
+
return "unknown";
|
|
105
|
+
return PROVIDER_STOP_REASONS[native.trim().toLowerCase()] ?? "unknown";
|
|
106
|
+
}
|
|
107
|
+
export function providerDone(usage, stopReason) {
|
|
108
|
+
return { type: "done", usage, ...(stopReason === undefined ? {} : { stopReason }) };
|
|
51
109
|
}
|
|
52
110
|
export function providerError(error, secrets = []) {
|
|
53
111
|
const info = errorToErrorInfo(error, secrets);
|
|
54
|
-
return { type: "error", error: info };
|
|
112
|
+
return { type: "error", error: info.failureClass ? info : { ...info, failureClass: classifyProviderFailure(error) } };
|
|
55
113
|
}
|
|
56
114
|
export function toolCallContent(id, name, args = {}) {
|
|
57
115
|
return { type: "tool_call", id, name, arguments: args };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveCredentialValue } from "../credentials.js";
|
|
2
|
-
import { providerDone, providerError, providerTextDelta, providerThinkingDelta, providerToolCall, providerToolCallDelta, providerUsage, toolCallFromArgumentsText, } from "../provider-events.js";
|
|
2
|
+
import { mapProviderStopReason, providerDone, providerError, providerTextDelta, providerThinkingDelta, providerToolCall, providerToolCallDelta, providerUsage, toolCallFromArgumentsText, } from "../provider-events.js";
|
|
3
3
|
import { assertStructuredOutputRequestSupported } from "../structured-output.js";
|
|
4
4
|
import { trimTrailingSlashes } from "../trim-trailing-slashes.js";
|
|
5
5
|
import { applyOpenAIChatStructuredOutput, assertOpenAIChatMessage, mapOpenAIChatUsage, serializeOpenAIChatMessage, serializeOpenAITool, } from "./openai-primitives.js";
|
|
@@ -13,6 +13,7 @@ export async function* openAIChatEvents(body, options = {}) {
|
|
|
13
13
|
let usage;
|
|
14
14
|
let sawDoneMarker = false;
|
|
15
15
|
let sawFinishReason = false;
|
|
16
|
+
let finishReason;
|
|
16
17
|
for await (const sseEvent of readSseEvents(body, { signal: options.signal })) {
|
|
17
18
|
if (options.onComment && sseEvent.comments?.length) {
|
|
18
19
|
for (const text of sseEvent.comments) {
|
|
@@ -43,8 +44,10 @@ export async function* openAIChatEvents(body, options = {}) {
|
|
|
43
44
|
yield providerUsage(mapped);
|
|
44
45
|
}
|
|
45
46
|
for (const choice of parsed.choices ?? []) {
|
|
46
|
-
if (choice.finish_reason)
|
|
47
|
+
if (choice.finish_reason) {
|
|
47
48
|
sawFinishReason = true;
|
|
49
|
+
finishReason = choice.finish_reason;
|
|
50
|
+
}
|
|
48
51
|
const delta = choice.delta ?? {};
|
|
49
52
|
if (typeof delta.content === "string" && delta.content)
|
|
50
53
|
yield providerTextDelta(delta.content);
|
|
@@ -83,7 +86,7 @@ export async function* openAIChatEvents(body, options = {}) {
|
|
|
83
86
|
for (const call of tools.values()) {
|
|
84
87
|
yield providerToolCall(toolCallFromArgumentsText(call.id, call.name, call.argumentsText));
|
|
85
88
|
}
|
|
86
|
-
yield providerDone((options.strictCompletion ?? true) || options.doneUsage ? usage : undefined);
|
|
89
|
+
yield providerDone((options.strictCompletion ?? true) || options.doneUsage ? usage : undefined, finishReason === undefined ? undefined : mapProviderStopReason(finishReason));
|
|
87
90
|
}
|
|
88
91
|
export function createOpenAICompatibleProvider(options) {
|
|
89
92
|
const providerId = options.id ?? "openai-compatible";
|