@arnilo/prism 0.0.15 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/agent-definitions.js +2 -3
  3. package/dist/agent-loops.js +12 -7
  4. package/dist/agent-run-lifecycle.d.ts +1 -2
  5. package/dist/agent-run-lifecycle.js +1 -1
  6. package/dist/agent-run-state.js +16 -3
  7. package/dist/agents.d.ts +1 -1
  8. package/dist/agents.js +121 -51
  9. package/dist/cache-helpers.js +18 -9
  10. package/dist/checkpoints.js +5 -9
  11. package/dist/cli-init.js +3 -7
  12. package/dist/cli-runner.d.ts +1 -1
  13. package/dist/cli-runner.js +74 -13
  14. package/dist/compaction.js +5 -4
  15. package/dist/config.js +7 -4
  16. package/dist/content.js +26 -24
  17. package/dist/context-budget.js +12 -8
  18. package/dist/contracts.d.ts +3 -3
  19. package/dist/contracts.js +4 -1
  20. package/dist/contribution-parsing.js +6 -2
  21. package/dist/conversations.js +2 -1
  22. package/dist/credentials.d.ts +1 -1
  23. package/dist/credentials.js +3 -1
  24. package/dist/event-multiplexer.js +1 -3
  25. package/dist/feedback.js +11 -9
  26. package/dist/guardrails.d.ts +1 -1
  27. package/dist/guardrails.js +17 -14
  28. package/dist/identity.js +10 -2
  29. package/dist/index.d.ts +82 -83
  30. package/dist/index.js +42 -42
  31. package/dist/input.d.ts +2 -2
  32. package/dist/input.js +40 -24
  33. package/dist/instruction-injection.d.ts +1 -1
  34. package/dist/node/agent-definitions.js +16 -8
  35. package/dist/node/contribution-discovery.d.ts +1 -2
  36. package/dist/node/contribution-discovery.js +3 -3
  37. package/dist/node/session-store-jsonl.js +10 -7
  38. package/dist/node/settings.d.ts +1 -1
  39. package/dist/node/settings.js +1 -1
  40. package/dist/node/system-project-prompts.js +2 -4
  41. package/dist/node/trust.js +1 -1
  42. package/dist/persistence-lifecycle.js +1 -3
  43. package/dist/provider-events.js +3 -1
  44. package/dist/provider-request-policy.js +3 -4
  45. package/dist/providers/media.d.ts +1 -1
  46. package/dist/providers/openai-compatible.js +3 -4
  47. package/dist/providers/openai-primitives.js +7 -7
  48. package/dist/redaction.d.ts +1 -0
  49. package/dist/redaction.js +5 -2
  50. package/dist/resources.d.ts +2 -2
  51. package/dist/resources.js +2 -2
  52. package/dist/rpc.js +42 -9
  53. package/dist/run-ledger.js +13 -4
  54. package/dist/run-limits.js +49 -10
  55. package/dist/secure-agent.js +1 -1
  56. package/dist/security.js +7 -2
  57. package/dist/session-stores.d.ts +1 -1
  58. package/dist/session-stores.js +13 -13
  59. package/dist/structured-output.js +2 -2
  60. package/dist/system-prompts.js +7 -2
  61. package/dist/testing/compaction-conformance.js +5 -1
  62. package/dist/testing/extension-conformance.js +15 -3
  63. package/dist/testing/feedback.d.ts +1 -3
  64. package/dist/testing/feedback.js +1 -1
  65. package/dist/testing/persistence-schema.js +206 -37
  66. package/dist/testing/provider-conformance.js +3 -3
  67. package/dist/testing/run-ledger-conformance.js +1 -1
  68. package/dist/testing/session-store-conformance.js +1 -1
  69. package/dist/testing/tool-conformance.js +30 -5
  70. package/dist/thinking.js +4 -1
  71. package/dist/tools.d.ts +2 -2
  72. package/dist/tools.js +24 -5
  73. package/docs/0.1.0-readiness.md +139 -0
  74. package/docs/index.md +3 -1
  75. package/docs/migration.md +29 -0
  76. package/docs/performance.md +33 -0
  77. package/docs/public-contracts.md +1 -1
  78. package/docs/release-and-install.md +106 -17
  79. package/package.json +14 -6
  80. package/docs/review-coverage-2026-07-14.md +0 -260
  81. package/docs/review-coverage-2026-07-15.md +0 -193
  82. package/docs/review-coverage-2026-07-17-provider-validation.md +0 -192
  83. package/docs/review-coverage-2026-07-19-phase-3.md +0 -174
  84. package/docs/review-coverage-2026-07-20-phase-4.md +0 -175
  85. package/docs/review-coverage-2026-07-21-phase-5.md +0 -172
  86. package/docs/review-coverage-2026-07-22-phase-6.md +0 -209
  87. package/docs/review-coverage-2026-07-22-phase-7.md +0 -173
  88. package/docs/review-coverage-2026-07-23-phase-8.md +0 -245
  89. package/docs/review-coverage-2026-07-25-phase-9.md +0 -256
  90. package/docs/review-coverage-2026-07-26-phase-10.md +0 -132
package/dist/index.d.ts CHANGED
@@ -1,99 +1,98 @@
1
- export type * from "./contracts.js";
2
- export type { RealtimeCaps, RealtimeEvent, RealtimeSession, RealtimeSessionFactory, RealtimeSessionOptions, RunLimitCounters, RunLimitName, SecureAgentOptions, ToolCallAuthority, } from "./contracts.js";
3
- export { isSessionEntryKind, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SessionAppendConflictError, isSessionAppendConflict, AgentRunError, AgentRunStateError, assertSessionMetadataKey, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SESSION_SEARCH_UNSUPPORTED_CODE, SessionSearchUnsupportedError, isSessionSearchUnsupported, DEFAULT_SESSION_SEARCH_LIMIT, HARD_MAX_SESSION_SEARCH_LIMIT, DEFAULT_MAX_SESSION_SEARCH_QUERY_BYTES, HARD_MAX_SESSION_SEARCH_QUERY_BYTES, DEFAULT_MAX_SESSION_SEARCH_SNIPPET_BYTES, HARD_MAX_SESSION_SEARCH_SNIPPET_BYTES, DEFAULT_MAX_SESSION_SEARCH_CURSOR_BYTES, HARD_MAX_SESSION_SEARCH_CURSOR_BYTES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_SESSIONS, HARD_MAX_SESSION_SEARCH_LINEAR_SESSIONS, DEFAULT_MAX_SESSION_SEARCH_LINEAR_ENTRIES, HARD_MAX_SESSION_SEARCH_LINEAR_ENTRIES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_BYTES, HARD_MAX_SESSION_SEARCH_LINEAR_BYTES, DEFAULT_MAX_SESSION_SEARCH_FTS_CANDIDATES, HARD_MAX_SESSION_SEARCH_FTS_CANDIDATES, resolveSessionSearchQuery, DEFAULT_MAX_PENDING_STEERS, HARD_MAX_PENDING_STEERS, DEFAULT_MAX_PENDING_STEER_BYTES, HARD_MAX_PENDING_STEER_BYTES } from "./contracts.js";
4
- export { createAgent, createAgentSession, resumeAgentRun, resumeAgentRunStream } from "./agents.js";
5
- export { createBatchedRunLedger, isFlushableRunLedger, DEFAULT_LEDGER_BATCH_ENTRIES, HARD_LEDGER_BATCH_ENTRIES, DEFAULT_LEDGER_BATCH_BYTES, HARD_LEDGER_BATCH_BYTES, DEFAULT_LEDGER_BATCH_DELAY_MS, HARD_LEDGER_BATCH_DELAY_MS, } from "./run-ledger.js";
6
- export type { BatchedRunLedgerOptions } from "./run-ledger.js";
7
- export { createSecureAgent } from "./secure-agent.js";
8
- export { createMemoryRunFeedbackStore, prepareRunFeedback, requireRunFeedbackOwnership, runFeedbackPageLimit, RunFeedbackError, } from "./feedback.js";
9
- export type { MemoryRunFeedbackStoreOptions, PrepareRunFeedbackOptions, RunFeedbackLimits, RunFeedbackRun, RunFeedbackRunResolver, } from "./feedback.js";
10
- export { CHECKPOINT_CONFLICT_CODE, CheckpointConflictError, createMemoryCheckpointStore } from "./checkpoints.js";
11
- export { AGENT_RUN_STATE_NAMESPACE, AGENT_RUN_STATE_SCHEMA_VERSION, DEFAULT_MAX_AGENT_RUN_STATE_BYTES, HARD_MAX_AGENT_RUN_STATE_BYTES, agentFingerprint, loadAgentRunState } from "./agent-run-state.js";
12
- export type { StoredAgentRunState } from "./agent-run-state.js";
1
+ export { resolveAgentDefinition } from "./agent-definitions.js";
2
+ export { dispatchToolCallsInOrder, generateValidateReviseLoop, isAgentLoopOptions, resolveLoop, resolveToolConcurrency, singleShotLoop, } from "./agent-loops.js";
3
+ export type { AgentRunLifecycle, AgentRunLifecycleAgent, AgentRunLifecycleOptions, AgentRunLifecycleRequest, AgentRunLifecycleStreamRequest, } from "./agent-run-lifecycle.js";
13
4
  export { createAgentRunLifecycle } from "./agent-run-lifecycle.js";
14
- export type { AgentRunLifecycle, AgentRunLifecycleAgent, AgentRunLifecycleOptions, AgentRunLifecycleRequest, AgentRunLifecycleStreamRequest } from "./agent-run-lifecycle.js";
15
- export type { MemoryCheckpointStoreOptions } from "./checkpoints.js";
16
- export { LEASE_CONFLICT_CODE, LeaseConflictError, createMemoryLeaseStore } from "./leases.js";
17
- export { createMemoryPersistenceLifecycle, isResourceHeld, PersistenceLifecycleError, DEFAULT_LIFECYCLE_PAGE_SIZE, HARD_LIFECYCLE_PAGE_SIZE, DEFAULT_MAX_HOLD_REASON_BYTES, HARD_MAX_HOLD_REASON_BYTES, } from "./persistence-lifecycle.js";
18
- export type { PersistenceResourceKind, LegalHoldRecord, PutLegalHoldInput, ReleaseLegalHoldInput, LegalHoldQuery, ApplyRetentionInput, ApplyRetentionResult, LegalHoldExportItem, ExportUnderHoldInput, TenantQuota, SetTenantQuotaInput, ConsumeTenantQuotaInput, PersistenceLifecycleStore, } from "./persistence-lifecycle.js";
19
- export { createEventMultiplexer } from "./event-multiplexer.js";
20
- export type { EventMultiplexer, EventMultiplexerOptions, EventOverflowInfo, EventOverflowPolicy } from "./event-multiplexer.js";
5
+ export type { StoredAgentRunState } from "./agent-run-state.js";
6
+ 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";
7
+ export { createAgent, createAgentSession, resumeAgentRun, resumeAgentRunStream } from "./agents.js";
8
+ export type { ArtifactApproval, ArtifactApprovalState, ArtifactCitation, ArtifactDecisionState, ArtifactDeliveryToken, ArtifactRecord, ArtifactRevision, } from "./artifacts.js";
9
+ export { ARTIFACT_CHECKPOINT_NAMESPACE, ArtifactError, artifactApprovalState, artifactCheckpointKey, } from "./artifacts.js";
10
+ export type { ApplyCacheControlOptions, CacheControlledContentBlock, CacheControlledMessage, CacheControlValue, CacheUsageReport, } from "./cache-helpers.js";
21
11
  export { applyCacheControl, cacheHitRate, cacheSavings, cacheUsageReport, mapCacheRetention, sanitizeCacheKey } from "./cache-helpers.js";
22
- export type { ApplyCacheControlOptions, CacheControlledContentBlock, CacheControlledMessage, CacheControlValue, CacheUsageReport } from "./cache-helpers.js";
23
- export { resolveAgentDefinition } from "./agent-definitions.js";
24
- export { parseSkillFile, parseAgentFile } from "./contribution-parsing.js";
25
- export { assertJsonObject, isJsonObject, loadConfigLayers, mergeConfigLayers } from "./config.js";
26
- export type { ConfigLayer, ConfigLoadContext, ConfigProvider } from "./config.js";
27
- export { createDefaultCompactionStrategy, isCompactionEntryData } from "./compaction.js";
12
+ export type { MemoryCheckpointStoreOptions } from "./checkpoints.js";
13
+ export { CHECKPOINT_CONFLICT_CODE, CheckpointConflictError, createMemoryCheckpointStore } from "./checkpoints.js";
28
14
  export type { DefaultCompactionStrategyOptions } from "./compaction.js";
29
- export { createDefaultRetryPolicy, isTransientErrorInfo, waitForRetry } from "./retry.js";
30
- export type { DefaultRetryPolicyOptions } from "./retry.js";
31
- export { createContributionRegistries, createContributionRegistry, registerDiscoveredContributions } from "./contributions.js";
32
- export type { ContributionRegistries, ContributionRegistriesOptions, ContributionRegistry, ContributionRegistryOptions } from "./contributions.js";
33
- export { createChainedCredentialResolver, createEnvCredentialResolver, createExplicitCredentialResolver, createMemoryCredentialStore, refreshOAuthCredential, revokeOAuthCredential, resolveCredentialValue } from "./credentials.js";
34
- export { createExtensionEventBus, createExtensionKernel } from "./extensions.js";
35
- export type { ExtensionErrorPolicy, ExtensionEventBus, ExtensionEventHandler, ExtensionKernel, ExtensionKernelOptions, ExtensionLoadPolicy } from "./extensions.js";
36
- export type { CredentialRecord, CredentialValueSource, MemoryCredentialStore, RevocableOAuthCredentialStore } from "./credentials.js";
37
- export { createModelRegistry } from "./models.js";
38
- export { authMethodKey, defineProviderPackage, systemPromptContributionKey } from "./provider-packages.js";
39
- export { assertStructuredOutputRequestSupported, artifactStructuredOutputRequest, DEFAULT_MAX_STRUCTURED_OUTPUT_NAME_LENGTH, DEFAULT_MAX_STRUCTURED_OUTPUT_SCHEMA_BYTES, modelSupportsStructuredOutput, resolveRunProviderOptions, StructuredOutputError, validateStructuredOutputOptions, withoutStructuredOutput, } from "./structured-output.js";
40
- export { createProviderTurnMetadata, readProviderHttpStatus } from "./observability.js";
41
- export { createProviderRequestPolicyChain, createSessionCachePolicy, mergeProviderRequestOptions } from "./provider-request-policy.js";
42
- export type { SessionCachePolicyOptions } from "./provider-request-policy.js";
43
- export { THINKING_LEVELS, applyThinkingLevel, isThinkingLevel, normalizeThinkingLevel, thinkingCompatFor, thinkingFamilyForModel, } from "./thinking.js";
44
- export type { ThinkingCompatFamily, ThinkingLevel } from "./thinking.js";
45
- export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
46
- export type { ResolveUseCaseModelInput, ResolvedUseCaseModel, UseCaseModelBinding, } from "./use-case-model.js";
47
- export { composeSystemPrompt, mergeSystemPromptConfig } from "./system-prompts.js";
48
- export type { ComposeSystemPromptOptions } from "./system-prompts.js";
49
- export type { ModelRegistry, ModelRegistryOptions } from "./models.js";
50
- export { definePrismManifest, parsePrismManifest } from "./manifests.js";
51
- export type { ManifestContributionDeclaration, ManifestContributionKind, ManifestResourceDeclaration, PrismManifest } from "./manifests.js";
52
- export { assertDeclaredMediaTypeMatches, assertMediaBlocksWithinBounds, assertMessagesSupportModelCapabilities, assertModelSupportsContentBlocks, assertSsrfAllowedUrl, collectMessageContentBlocks, contentBlockInputModality, DEFAULT_MAX_AUDIO_DURATION_MS, DEFAULT_MAX_MEDIA_ITEM_BYTES, DEFAULT_MAX_MEDIA_ITEMS_PER_REQUEST, DEFAULT_MAX_MEDIA_REQUEST_BYTES, DEFAULT_MEDIA_FETCH_TIMEOUT_MS, loadBoundedBinaryResource, MediaContentError, MODEL_INPUT_CAPABILITIES, resolveMediaContentBlock, resolveMediaContentBlocks, sniffMediaMimeType, UnsupportedModalityError, } from "./content.js";
15
+ export { createDefaultCompactionStrategy, isCompactionEntryData } from "./compaction.js";
16
+ export type { ConfigLayer, ConfigLoadContext, ConfigProvider } from "./config.js";
17
+ export { assertJsonObject, isJsonObject, loadConfigLayers, mergeConfigLayers } from "./config.js";
53
18
  export type { AudioContent, DocumentContent, FileContent, MediaContentBlock, MediaContentBounds, MediaHostAddress, MediaHostnameResolver, MediaMimePolicy, MediaUrlRequest, MediaUrlRequester, ModelInputCapability, ResolvedMediaContent, ResolveMediaContentOptions, SsrfPolicy, } from "./content.js";
54
- export { loadBinaryResource, loadJsonResource, loadManifestResource, loadTextResource } from "./resources.js";
55
- export type { LoadBinaryResourceOptions } from "./resources.js";
56
- export { createChainedSettingsProvider, createStaticSettingsProvider } from "./settings.js";
57
- export { createMiddlewareRegistry } from "./middleware.js";
58
- export type { Middleware, MiddlewareHookName, MiddlewareNext, MiddlewareRegistry, MiddlewareRegistryOptions } from "./middleware.js";
59
- export { assembleProviderInput, createDefaultInputBuilder, createDefaultPromptBuilder, renderPromptTemplate, resolveContextProviders } from "./input.js";
60
- 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";
19
+ export { assertDeclaredMediaTypeMatches, assertMediaBlocksWithinBounds, assertMessagesSupportModelCapabilities, assertModelSupportsContentBlocks, assertSsrfAllowedUrl, collectMessageContentBlocks, contentBlockInputModality, DEFAULT_MAX_AUDIO_DURATION_MS, DEFAULT_MAX_MEDIA_ITEM_BYTES, DEFAULT_MAX_MEDIA_ITEMS_PER_REQUEST, DEFAULT_MAX_MEDIA_REQUEST_BYTES, DEFAULT_MEDIA_FETCH_TIMEOUT_MS, loadBoundedBinaryResource, MediaContentError, MODEL_INPUT_CAPABILITIES, resolveMediaContentBlock, resolveMediaContentBlocks, sniffMediaMimeType, UnsupportedModalityError, } from "./content.js";
61
20
  export type { ContextBudget, ContextBudgetMessageGroups, ContextBudgetOmission, ContextBudgetOmissionKind, ContextBudgetReport, } from "./context-budget.js";
62
- export type { AgentInput, AssembleProviderInputOptions, DefaultInputBuilder, DefaultInputBuildContext, DefaultPromptBuilder, InputAttachment, PromptInstruction, PromptTemplateOptions, ResolveContextOptions } from "./input.js";
63
- export { createMockProvider } from "./mock-provider.js";
64
- export { createMemorySessionStore, createSessionEntry, getSessionBranchEntries, listSessionBranches, rebuildSessionContext } from "./session-stores.js";
65
- export { CONVERSATION_METADATA_KEY, DEFAULT_MAX_CONVERSATION_CURSOR_BYTES, HARD_MAX_CONVERSATION_CURSOR_BYTES, ConversationError, conversationMarkerMetadata, conversationThreadFromRecord, decodeConversationReplayCursor, encodeConversationReplayCursor, } from "./conversations.js";
21
+ 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";
22
+ export type * from "./contracts.js";
23
+ export type { ProviderResolver, RealtimeCaps, RealtimeEvent, RealtimeSession, RealtimeSessionFactory, RealtimeSessionOptions, RunLimitCounters, RunLimitName, SecureAgentOptions, ToolCallAuthority, } from "./contracts.js";
24
+ export { AgentRunError, AgentRunStateError, assertSessionMetadataKey, 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_SESSION_SEARCH_LIMIT, 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, isSessionAppendConflict, isSessionEntryKind, isSessionSearchUnsupported, resolveSessionSearchQuery, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SESSION_SEARCH_UNSUPPORTED_CODE, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SessionAppendConflictError, SessionSearchUnsupportedError, } from "./contracts.js";
25
+ export { parseAgentFile, parseSkillFile } from "./contribution-parsing.js";
26
+ export type { ContributionRegistries, ContributionRegistriesOptions, ContributionRegistry, ContributionRegistryOptions, } from "./contributions.js";
27
+ export { createContributionRegistries, createContributionRegistry, registerDiscoveredContributions } from "./contributions.js";
66
28
  export type { ConversationBranchRef, ConversationReplayCursor, ConversationThread, ConversationThreadState, } from "./conversations.js";
67
- export { ARTIFACT_CHECKPOINT_NAMESPACE, ArtifactError, artifactApprovalState, artifactCheckpointKey, } from "./artifacts.js";
68
- export type { ArtifactApproval, ArtifactApprovalState, ArtifactCitation, ArtifactDecisionState, ArtifactDeliveryToken, ArtifactRecord, ArtifactRevision, } from "./artifacts.js";
69
- export { DEFAULT_DEVICE_MAX_CHUNK_BYTES, DEFAULT_DEVICE_MAX_CONCURRENT_SESSIONS, HARD_DEVICE_MAX_CHUNK_BYTES, HARD_DEVICE_MAX_CONCURRENT_SESSIONS, DevicePolicyError, acceptDeviceChunk, assertDeviceAdmit, redactDeviceTelemetry, resolveDevicePolicy, runDevicePolicyConformance, } from "./devices.js";
29
+ export { CONVERSATION_METADATA_KEY, ConversationError, conversationMarkerMetadata, conversationThreadFromRecord, DEFAULT_MAX_CONVERSATION_CURSOR_BYTES, decodeConversationReplayCursor, encodeConversationReplayCursor, HARD_MAX_CONVERSATION_CURSOR_BYTES, } from "./conversations.js";
30
+ export type { CredentialRecord, CredentialValueSource, MemoryCredentialStore, RevocableOAuthCredentialStore } from "./credentials.js";
31
+ export { createChainedCredentialResolver, createEnvCredentialResolver, createExplicitCredentialResolver, createMemoryCredentialStore, refreshOAuthCredential, resolveCredentialValue, revokeOAuthCredential, } from "./credentials.js";
70
32
  export type { DeviceAdapter, DeviceAdmitRequest, DeviceChunkResult, DeviceConformanceResult, DeviceKind, DevicePolicyErrorCode, DevicePolicyOptions, DeviceStreamLimits, ResolvedDevicePolicy, } from "./devices.js";
71
- export type { CreateMemorySessionStoreOptions, CreateSessionEntryOptions, MemorySessionSearchMode, SessionBranch, SessionBranchOptions, SessionContextSnapshot } from "./session-stores.js";
33
+ 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";
34
+ export type { EventMultiplexer, EventMultiplexerOptions, EventOverflowInfo, EventOverflowPolicy } from "./event-multiplexer.js";
35
+ export { createEventMultiplexer } from "./event-multiplexer.js";
36
+ export type { ExecutionAction, ExecutionDecision, ExecutionPolicy, ExecutionRisk } from "./execution-policy.js";
37
+ export { applyExecutionDecision, assertExecutionAllowed, checkExecution, ExecutionDeniedError } from "./execution-policy.js";
38
+ export type { ExtensionErrorPolicy, ExtensionEventBus, ExtensionEventHandler, ExtensionKernel, ExtensionKernelOptions, ExtensionLoadPolicy, } from "./extensions.js";
39
+ export { createExtensionEventBus, createExtensionKernel } from "./extensions.js";
40
+ export type { MemoryRunFeedbackStoreOptions, PrepareRunFeedbackOptions, RunFeedbackLimits, RunFeedbackRun, RunFeedbackRunResolver, } from "./feedback.js";
41
+ export { createMemoryRunFeedbackStore, prepareRunFeedback, RunFeedbackError, requireRunFeedbackOwnership, runFeedbackPageLimit, } from "./feedback.js";
42
+ export type { GuardrailRunResult, RunGuardrailsOptions, } from "./guardrails.js";
43
+ export { assertGuardrailsAllowed, GuardrailError, MAX_GUARDRAIL_CONCURRENCY, runGuardrails } from "./guardrails.js";
44
+ export type { AgentIdentity, AssertIdentityActiveOptions, IdentityLimits, IdentityVerifier, NarrowIdentityOptions, Principal, ResolvedIdentityLimits, } from "./identity.js";
45
+ export { assertIdentityActive, assertIdentityMatchesOwnership, assertIdentityPropagation, DEFAULT_IDENTITY_LIMITS, HARD_IDENTITY_LIMITS, IdentityError, identityTelemetryAttributes, narrowIdentity, ownershipFromIdentity, resolveIdentityLimits, resolveRunIdentity, } from "./identity.js";
46
+ export type { AgentInput, AssembleProviderInputOptions, DefaultInputBuildContext, DefaultInputBuilder, DefaultPromptBuilder, InputAttachment, PromptInstruction, PromptTemplateOptions, ResolveContextOptions, } from "./input.js";
47
+ export { assembleProviderInput, createDefaultInputBuilder, createDefaultPromptBuilder, renderPromptTemplate, resolveContextProviders, } from "./input.js";
48
+ export type { ResolveInstructionInjectorsOptions } from "./instruction-injection.js";
49
+ export { resolveInstructionInjectors, runInstructionInjectors } from "./instruction-injection.js";
50
+ export { createMemoryLeaseStore, LEASE_CONFLICT_CODE, LeaseConflictError } from "./leases.js";
51
+ export type { ManifestContributionDeclaration, ManifestContributionKind, ManifestResourceDeclaration, PrismManifest } from "./manifests.js";
52
+ export { definePrismManifest, parsePrismManifest } from "./manifests.js";
53
+ export type { Middleware, MiddlewareHookName, MiddlewareNext, MiddlewareRegistry, MiddlewareRegistryOptions } from "./middleware.js";
54
+ export { createMiddlewareRegistry } from "./middleware.js";
72
55
  export type { MockProviderOptions } from "./mock-provider.js";
56
+ export { createMockProvider } from "./mock-provider.js";
57
+ export type { ModelRegistry, ModelRegistryOptions } from "./models.js";
58
+ export { createModelRegistry } from "./models.js";
59
+ export { createProviderTurnMetadata, readProviderHttpStatus } from "./observability.js";
60
+ export type { ApplyRetentionInput, ApplyRetentionResult, ConsumeTenantQuotaInput, ExportUnderHoldInput, LegalHoldExportItem, LegalHoldQuery, LegalHoldRecord, PersistenceLifecycleStore, PersistenceResourceKind, PutLegalHoldInput, ReleaseLegalHoldInput, SetTenantQuotaInput, TenantQuota, } from "./persistence-lifecycle.js";
61
+ 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";
73
62
  export { providerContentDelta, providerContinuationRequired, providerDone, providerError, providerTextDelta, providerThinkingDelta, providerToolCall, providerToolCallDelta, providerUsage, toolCallContent, toolCallFromArgumentsText, } from "./provider-events.js";
74
- export type { ProviderResolver } from "./contracts.js";
75
- export { createProviderRegistry, createProviderResolver } from "./providers.js";
63
+ export { authMethodKey, defineProviderPackage, systemPromptContributionKey } from "./provider-packages.js";
64
+ export type { SessionCachePolicyOptions } from "./provider-request-policy.js";
65
+ export { createProviderRequestPolicyChain, createSessionCachePolicy, mergeProviderRequestOptions } from "./provider-request-policy.js";
76
66
  export type { ProviderRegistry, ProviderRegistryOptions } from "./providers.js";
77
- export { createSecretRedactor, errorToErrorInfo, redactAgentEvent, redactMessage, redactProviderRequest, redactRunLedgerRecord, redactSecrets, redactSessionEntry } from "./redaction.js";
67
+ export { createProviderRegistry, createProviderResolver } from "./providers.js";
78
68
  export type { SecretRedactor } from "./redaction.js";
79
- export { assertPermission, assertTrusted, checkPermission, createStaticPermissionPolicy, createStaticTrustPolicy, denialToErrorInfo, isTrusted, PermissionDeniedError, TrustDeniedError } from "./security.js";
69
+ export { createSecretRedactor, errorToErrorInfo, redactAgentEvent, redactMessage, redactProviderRequest, redactRunLedgerRecord, redactSecrets, redactSessionEntry, resolveRedactor, } from "./redaction.js";
70
+ export type { DuplicateRegistrationOptions, DuplicateRegistrationPolicy } from "./registry-options.js";
71
+ export type { LoadBinaryResourceOptions } from "./resources.js";
72
+ export { loadBinaryResource, loadJsonResource, loadManifestResource, loadTextResource } from "./resources.js";
73
+ export type { DefaultRetryPolicyOptions } from "./retry.js";
74
+ export { createDefaultRetryPolicy, isTransientErrorInfo, waitForRetry } from "./retry.js";
75
+ export type { BatchedRunLedgerOptions } from "./run-ledger.js";
76
+ 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";
77
+ export type { RunLimitTrackerOptions } from "./run-limits.js";
78
+ export { createRunLimitTracker, DEFAULT_RUN_LIMITS, HARD_MAX_RUN_COST, HARD_RUN_LIMITS, RunLimitError, RunLimitTracker, resolveRunLimits, } from "./run-limits.js";
79
+ export { createSecureAgent } from "./secure-agent.js";
80
80
  export type { PermissionDecision, PermissionPolicy, PermissionRequest, TrustDecision, TrustPolicy, TrustRequest } from "./security.js";
81
- export { assertIdentityActive, assertIdentityMatchesOwnership, assertIdentityPropagation, DEFAULT_IDENTITY_LIMITS, HARD_IDENTITY_LIMITS, IdentityError, identityTelemetryAttributes, narrowIdentity, ownershipFromIdentity, resolveIdentityLimits, resolveRunIdentity, } from "./identity.js";
82
- export type { AgentIdentity, AssertIdentityActiveOptions, IdentityLimits, IdentityVerifier, NarrowIdentityOptions, Principal, ResolvedIdentityLimits, } from "./identity.js";
83
- export { applyExecutionDecision, assertExecutionAllowed, checkExecution, ExecutionDeniedError } from "./execution-policy.js";
84
- export type { ExecutionAction, ExecutionDecision, ExecutionPolicy, ExecutionRisk } from "./execution-policy.js";
85
- export { createSkillRegistry, resolveActiveSkills } from "./skills.js";
81
+ export { assertPermission, assertTrusted, checkPermission, createStaticPermissionPolicy, createStaticTrustPolicy, denialToErrorInfo, isTrusted, PermissionDeniedError, TrustDeniedError, } from "./security.js";
82
+ export type { CreateMemorySessionStoreOptions, CreateSessionEntryOptions, MemorySessionSearchMode, SessionBranch, SessionBranchOptions, SessionContextSnapshot, } from "./session-stores.js";
83
+ export { createMemorySessionStore, createSessionEntry, getSessionBranchEntries, listSessionBranches, rebuildSessionContext, } from "./session-stores.js";
84
+ export { createChainedSettingsProvider, createStaticSettingsProvider } from "./settings.js";
86
85
  export type { ResolveActiveSkillsOptions, SkillRegistryOptions } from "./skills.js";
87
- export { resolveInstructionInjectors, runInstructionInjectors } from "./instruction-injection.js";
88
- export type { ResolveInstructionInjectorsOptions } from "./instruction-injection.js";
89
- export { createToolRegistry, dispatchToolCall, filterTools, createToolParameterValidator } from "./tools.js";
90
- export { assertGuardrailsAllowed, GuardrailError, MAX_GUARDRAIL_CONCURRENCY, runGuardrails } from "./guardrails.js";
91
- export { createRunLimitTracker, DEFAULT_RUN_LIMITS, HARD_MAX_RUN_COST, HARD_RUN_LIMITS, RunLimitError, RunLimitTracker, resolveRunLimits } from "./run-limits.js";
92
- export type { GuardrailRunResult, RunGuardrailsOptions, } from "./guardrails.js";
93
- export type { RunLimitTrackerOptions, } from "./run-limits.js";
86
+ export { createSkillRegistry, resolveActiveSkills } from "./skills.js";
87
+ export { artifactStructuredOutputRequest, assertStructuredOutputRequestSupported, DEFAULT_MAX_STRUCTURED_OUTPUT_NAME_LENGTH, DEFAULT_MAX_STRUCTURED_OUTPUT_SCHEMA_BYTES, modelSupportsStructuredOutput, resolveRunProviderOptions, StructuredOutputError, validateStructuredOutputOptions, withoutStructuredOutput, } from "./structured-output.js";
88
+ export type { ComposeSystemPromptOptions } from "./system-prompts.js";
89
+ export { composeSystemPrompt, mergeSystemPromptConfig } from "./system-prompts.js";
90
+ export type { ThinkingCompatFamily, ThinkingLevel } from "./thinking.js";
91
+ export { applyThinkingLevel, isThinkingLevel, normalizeThinkingLevel, THINKING_LEVELS, thinkingCompatFor, thinkingFamilyForModel, } from "./thinking.js";
94
92
  export type { DispatchToolCallOptions, ToolArgumentValidationError, ToolArgumentValidationResult, ToolArgumentValidator, ToolFilter, ToolFilterInput, ToolParameterValidatorOptions, ToolRegistryOptions, ToolValidator, } from "./tools.js";
95
- export type { DuplicateRegistrationOptions, DuplicateRegistrationPolicy } from "./registry-options.js";
96
- export { dispatchToolCallsInOrder, generateValidateReviseLoop, isAgentLoopOptions, resolveLoop, resolveToolConcurrency, singleShotLoop } from "./agent-loops.js";
93
+ export { createToolParameterValidator, createToolRegistry, dispatchToolCall, filterTools } from "./tools.js";
94
+ export type { ResolvedUseCaseModel, ResolveUseCaseModelInput, UseCaseModelBinding, } from "./use-case-model.js";
95
+ export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
97
96
  export declare const name = "prism";
98
- export declare const version = "0.0.15";
97
+ export declare const version = "0.0.16";
99
98
  export declare const description = "Agent harness for AI providers, agents, sessions, and tools.";
package/dist/index.js CHANGED
@@ -1,56 +1,56 @@
1
- export { isSessionEntryKind, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SessionAppendConflictError, isSessionAppendConflict, AgentRunError, AgentRunStateError, assertSessionMetadataKey, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SESSION_SEARCH_UNSUPPORTED_CODE, SessionSearchUnsupportedError, isSessionSearchUnsupported, DEFAULT_SESSION_SEARCH_LIMIT, HARD_MAX_SESSION_SEARCH_LIMIT, DEFAULT_MAX_SESSION_SEARCH_QUERY_BYTES, HARD_MAX_SESSION_SEARCH_QUERY_BYTES, DEFAULT_MAX_SESSION_SEARCH_SNIPPET_BYTES, HARD_MAX_SESSION_SEARCH_SNIPPET_BYTES, DEFAULT_MAX_SESSION_SEARCH_CURSOR_BYTES, HARD_MAX_SESSION_SEARCH_CURSOR_BYTES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_SESSIONS, HARD_MAX_SESSION_SEARCH_LINEAR_SESSIONS, DEFAULT_MAX_SESSION_SEARCH_LINEAR_ENTRIES, HARD_MAX_SESSION_SEARCH_LINEAR_ENTRIES, DEFAULT_MAX_SESSION_SEARCH_LINEAR_BYTES, HARD_MAX_SESSION_SEARCH_LINEAR_BYTES, DEFAULT_MAX_SESSION_SEARCH_FTS_CANDIDATES, HARD_MAX_SESSION_SEARCH_FTS_CANDIDATES, resolveSessionSearchQuery, DEFAULT_MAX_PENDING_STEERS, HARD_MAX_PENDING_STEERS, DEFAULT_MAX_PENDING_STEER_BYTES, HARD_MAX_PENDING_STEER_BYTES } from "./contracts.js";
2
- export { createAgent, createAgentSession, resumeAgentRun, resumeAgentRunStream } from "./agents.js";
3
- export { createBatchedRunLedger, isFlushableRunLedger, DEFAULT_LEDGER_BATCH_ENTRIES, HARD_LEDGER_BATCH_ENTRIES, DEFAULT_LEDGER_BATCH_BYTES, HARD_LEDGER_BATCH_BYTES, DEFAULT_LEDGER_BATCH_DELAY_MS, HARD_LEDGER_BATCH_DELAY_MS, } from "./run-ledger.js";
4
- export { createSecureAgent } from "./secure-agent.js";
5
- export { createMemoryRunFeedbackStore, prepareRunFeedback, requireRunFeedbackOwnership, runFeedbackPageLimit, RunFeedbackError, } from "./feedback.js";
6
- export { CHECKPOINT_CONFLICT_CODE, CheckpointConflictError, createMemoryCheckpointStore } from "./checkpoints.js";
7
- export { AGENT_RUN_STATE_NAMESPACE, AGENT_RUN_STATE_SCHEMA_VERSION, DEFAULT_MAX_AGENT_RUN_STATE_BYTES, HARD_MAX_AGENT_RUN_STATE_BYTES, agentFingerprint, loadAgentRunState } from "./agent-run-state.js";
1
+ export { resolveAgentDefinition } from "./agent-definitions.js";
2
+ export { dispatchToolCallsInOrder, generateValidateReviseLoop, isAgentLoopOptions, resolveLoop, resolveToolConcurrency, singleShotLoop, } from "./agent-loops.js";
8
3
  export { createAgentRunLifecycle } from "./agent-run-lifecycle.js";
9
- export { LEASE_CONFLICT_CODE, LeaseConflictError, createMemoryLeaseStore } from "./leases.js";
10
- export { createMemoryPersistenceLifecycle, isResourceHeld, PersistenceLifecycleError, DEFAULT_LIFECYCLE_PAGE_SIZE, HARD_LIFECYCLE_PAGE_SIZE, DEFAULT_MAX_HOLD_REASON_BYTES, HARD_MAX_HOLD_REASON_BYTES, } from "./persistence-lifecycle.js";
11
- export { createEventMultiplexer } from "./event-multiplexer.js";
4
+ 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";
5
+ export { createAgent, createAgentSession, resumeAgentRun, resumeAgentRunStream } from "./agents.js";
6
+ export { ARTIFACT_CHECKPOINT_NAMESPACE, ArtifactError, artifactApprovalState, artifactCheckpointKey, } from "./artifacts.js";
12
7
  export { applyCacheControl, cacheHitRate, cacheSavings, cacheUsageReport, mapCacheRetention, sanitizeCacheKey } from "./cache-helpers.js";
13
- export { resolveAgentDefinition } from "./agent-definitions.js";
14
- export { parseSkillFile, parseAgentFile } from "./contribution-parsing.js";
15
- export { assertJsonObject, isJsonObject, loadConfigLayers, mergeConfigLayers } from "./config.js";
8
+ export { CHECKPOINT_CONFLICT_CODE, CheckpointConflictError, createMemoryCheckpointStore } from "./checkpoints.js";
16
9
  export { createDefaultCompactionStrategy, isCompactionEntryData } from "./compaction.js";
17
- export { createDefaultRetryPolicy, isTransientErrorInfo, waitForRetry } from "./retry.js";
10
+ export { assertJsonObject, isJsonObject, loadConfigLayers, mergeConfigLayers } from "./config.js";
11
+ export { assertDeclaredMediaTypeMatches, assertMediaBlocksWithinBounds, assertMessagesSupportModelCapabilities, assertModelSupportsContentBlocks, assertSsrfAllowedUrl, collectMessageContentBlocks, contentBlockInputModality, DEFAULT_MAX_AUDIO_DURATION_MS, DEFAULT_MAX_MEDIA_ITEM_BYTES, DEFAULT_MAX_MEDIA_ITEMS_PER_REQUEST, DEFAULT_MAX_MEDIA_REQUEST_BYTES, DEFAULT_MEDIA_FETCH_TIMEOUT_MS, loadBoundedBinaryResource, MediaContentError, MODEL_INPUT_CAPABILITIES, resolveMediaContentBlock, resolveMediaContentBlocks, sniffMediaMimeType, UnsupportedModalityError, } from "./content.js";
12
+ 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";
13
+ export { AgentRunError, AgentRunStateError, assertSessionMetadataKey, 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_SESSION_SEARCH_LIMIT, 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, isSessionAppendConflict, isSessionEntryKind, isSessionSearchUnsupported, resolveSessionSearchQuery, SESSION_APPEND_CONFLICT_CODE, SESSION_ENTRY_KINDS, SESSION_ENTRY_SCHEMA_VERSION, SESSION_SEARCH_UNSUPPORTED_CODE, SESSION_SEARCH_WORKSPACE_METADATA_KEY, SessionAppendConflictError, SessionSearchUnsupportedError, } from "./contracts.js";
14
+ export { parseAgentFile, parseSkillFile } from "./contribution-parsing.js";
18
15
  export { createContributionRegistries, createContributionRegistry, registerDiscoveredContributions } from "./contributions.js";
19
- export { createChainedCredentialResolver, createEnvCredentialResolver, createExplicitCredentialResolver, createMemoryCredentialStore, refreshOAuthCredential, revokeOAuthCredential, resolveCredentialValue } from "./credentials.js";
16
+ export { CONVERSATION_METADATA_KEY, ConversationError, conversationMarkerMetadata, conversationThreadFromRecord, DEFAULT_MAX_CONVERSATION_CURSOR_BYTES, decodeConversationReplayCursor, encodeConversationReplayCursor, HARD_MAX_CONVERSATION_CURSOR_BYTES, } from "./conversations.js";
17
+ export { createChainedCredentialResolver, createEnvCredentialResolver, createExplicitCredentialResolver, createMemoryCredentialStore, refreshOAuthCredential, resolveCredentialValue, revokeOAuthCredential, } from "./credentials.js";
18
+ 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";
19
+ export { createEventMultiplexer } from "./event-multiplexer.js";
20
+ export { applyExecutionDecision, assertExecutionAllowed, checkExecution, ExecutionDeniedError } from "./execution-policy.js";
20
21
  export { createExtensionEventBus, createExtensionKernel } from "./extensions.js";
21
- export { createModelRegistry } from "./models.js";
22
- export { authMethodKey, defineProviderPackage, systemPromptContributionKey } from "./provider-packages.js";
23
- export { assertStructuredOutputRequestSupported, artifactStructuredOutputRequest, DEFAULT_MAX_STRUCTURED_OUTPUT_NAME_LENGTH, DEFAULT_MAX_STRUCTURED_OUTPUT_SCHEMA_BYTES, modelSupportsStructuredOutput, resolveRunProviderOptions, StructuredOutputError, validateStructuredOutputOptions, withoutStructuredOutput, } from "./structured-output.js";
24
- export { createProviderTurnMetadata, readProviderHttpStatus } from "./observability.js";
25
- export { createProviderRequestPolicyChain, createSessionCachePolicy, mergeProviderRequestOptions } from "./provider-request-policy.js";
26
- export { THINKING_LEVELS, applyThinkingLevel, isThinkingLevel, normalizeThinkingLevel, thinkingCompatFor, thinkingFamilyForModel, } from "./thinking.js";
27
- export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
28
- export { composeSystemPrompt, mergeSystemPromptConfig } from "./system-prompts.js";
22
+ export { createMemoryRunFeedbackStore, prepareRunFeedback, RunFeedbackError, requireRunFeedbackOwnership, runFeedbackPageLimit, } from "./feedback.js";
23
+ export { assertGuardrailsAllowed, GuardrailError, MAX_GUARDRAIL_CONCURRENCY, runGuardrails } from "./guardrails.js";
24
+ export { assertIdentityActive, assertIdentityMatchesOwnership, assertIdentityPropagation, DEFAULT_IDENTITY_LIMITS, HARD_IDENTITY_LIMITS, IdentityError, identityTelemetryAttributes, narrowIdentity, ownershipFromIdentity, resolveIdentityLimits, resolveRunIdentity, } from "./identity.js";
25
+ export { assembleProviderInput, createDefaultInputBuilder, createDefaultPromptBuilder, renderPromptTemplate, resolveContextProviders, } from "./input.js";
26
+ export { resolveInstructionInjectors, runInstructionInjectors } from "./instruction-injection.js";
27
+ export { createMemoryLeaseStore, LEASE_CONFLICT_CODE, LeaseConflictError } from "./leases.js";
29
28
  export { definePrismManifest, parsePrismManifest } from "./manifests.js";
30
- export { assertDeclaredMediaTypeMatches, assertMediaBlocksWithinBounds, assertMessagesSupportModelCapabilities, assertModelSupportsContentBlocks, assertSsrfAllowedUrl, collectMessageContentBlocks, contentBlockInputModality, DEFAULT_MAX_AUDIO_DURATION_MS, DEFAULT_MAX_MEDIA_ITEM_BYTES, DEFAULT_MAX_MEDIA_ITEMS_PER_REQUEST, DEFAULT_MAX_MEDIA_REQUEST_BYTES, DEFAULT_MEDIA_FETCH_TIMEOUT_MS, loadBoundedBinaryResource, MediaContentError, MODEL_INPUT_CAPABILITIES, resolveMediaContentBlock, resolveMediaContentBlocks, sniffMediaMimeType, UnsupportedModalityError, } from "./content.js";
31
- export { loadBinaryResource, loadJsonResource, loadManifestResource, loadTextResource } from "./resources.js";
32
- export { createChainedSettingsProvider, createStaticSettingsProvider } from "./settings.js";
33
29
  export { createMiddlewareRegistry } from "./middleware.js";
34
- export { assembleProviderInput, createDefaultInputBuilder, createDefaultPromptBuilder, renderPromptTemplate, resolveContextProviders } from "./input.js";
35
- 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";
36
30
  export { createMockProvider } from "./mock-provider.js";
37
- export { createMemorySessionStore, createSessionEntry, getSessionBranchEntries, listSessionBranches, rebuildSessionContext } from "./session-stores.js";
38
- export { CONVERSATION_METADATA_KEY, DEFAULT_MAX_CONVERSATION_CURSOR_BYTES, HARD_MAX_CONVERSATION_CURSOR_BYTES, ConversationError, conversationMarkerMetadata, conversationThreadFromRecord, decodeConversationReplayCursor, encodeConversationReplayCursor, } from "./conversations.js";
39
- export { ARTIFACT_CHECKPOINT_NAMESPACE, ArtifactError, artifactApprovalState, artifactCheckpointKey, } from "./artifacts.js";
40
- export { DEFAULT_DEVICE_MAX_CHUNK_BYTES, DEFAULT_DEVICE_MAX_CONCURRENT_SESSIONS, HARD_DEVICE_MAX_CHUNK_BYTES, HARD_DEVICE_MAX_CONCURRENT_SESSIONS, DevicePolicyError, acceptDeviceChunk, assertDeviceAdmit, redactDeviceTelemetry, resolveDevicePolicy, runDevicePolicyConformance, } from "./devices.js";
31
+ export { createModelRegistry } from "./models.js";
32
+ export { createProviderTurnMetadata, readProviderHttpStatus } from "./observability.js";
33
+ 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
34
  export { providerContentDelta, providerContinuationRequired, providerDone, providerError, providerTextDelta, providerThinkingDelta, providerToolCall, providerToolCallDelta, providerUsage, toolCallContent, toolCallFromArgumentsText, } from "./provider-events.js";
35
+ export { authMethodKey, defineProviderPackage, systemPromptContributionKey } from "./provider-packages.js";
36
+ export { createProviderRequestPolicyChain, createSessionCachePolicy, mergeProviderRequestOptions } from "./provider-request-policy.js";
42
37
  export { createProviderRegistry, createProviderResolver } from "./providers.js";
43
- export { createSecretRedactor, errorToErrorInfo, redactAgentEvent, redactMessage, redactProviderRequest, redactRunLedgerRecord, redactSecrets, redactSessionEntry } from "./redaction.js";
44
- export { assertPermission, assertTrusted, checkPermission, createStaticPermissionPolicy, createStaticTrustPolicy, denialToErrorInfo, isTrusted, PermissionDeniedError, TrustDeniedError } from "./security.js";
45
- export { assertIdentityActive, assertIdentityMatchesOwnership, assertIdentityPropagation, DEFAULT_IDENTITY_LIMITS, HARD_IDENTITY_LIMITS, IdentityError, identityTelemetryAttributes, narrowIdentity, ownershipFromIdentity, resolveIdentityLimits, resolveRunIdentity, } from "./identity.js";
46
- export { applyExecutionDecision, assertExecutionAllowed, checkExecution, ExecutionDeniedError } from "./execution-policy.js";
38
+ export { createSecretRedactor, errorToErrorInfo, redactAgentEvent, redactMessage, redactProviderRequest, redactRunLedgerRecord, redactSecrets, redactSessionEntry, resolveRedactor, } from "./redaction.js";
39
+ export { loadBinaryResource, loadJsonResource, loadManifestResource, loadTextResource } from "./resources.js";
40
+ export { createDefaultRetryPolicy, isTransientErrorInfo, waitForRetry } from "./retry.js";
41
+ 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";
42
+ export { createRunLimitTracker, DEFAULT_RUN_LIMITS, HARD_MAX_RUN_COST, HARD_RUN_LIMITS, RunLimitError, RunLimitTracker, resolveRunLimits, } from "./run-limits.js";
43
+ export { createSecureAgent } from "./secure-agent.js";
44
+ export { assertPermission, assertTrusted, checkPermission, createStaticPermissionPolicy, createStaticTrustPolicy, denialToErrorInfo, isTrusted, PermissionDeniedError, TrustDeniedError, } from "./security.js";
45
+ export { createMemorySessionStore, createSessionEntry, getSessionBranchEntries, listSessionBranches, rebuildSessionContext, } from "./session-stores.js";
46
+ export { createChainedSettingsProvider, createStaticSettingsProvider } from "./settings.js";
47
47
  export { createSkillRegistry, resolveActiveSkills } from "./skills.js";
48
- export { resolveInstructionInjectors, runInstructionInjectors } from "./instruction-injection.js";
49
- export { createToolRegistry, dispatchToolCall, filterTools, createToolParameterValidator } from "./tools.js";
50
- export { assertGuardrailsAllowed, GuardrailError, MAX_GUARDRAIL_CONCURRENCY, runGuardrails } from "./guardrails.js";
51
- export { createRunLimitTracker, DEFAULT_RUN_LIMITS, HARD_MAX_RUN_COST, HARD_RUN_LIMITS, RunLimitError, RunLimitTracker, resolveRunLimits } from "./run-limits.js";
52
- export { dispatchToolCallsInOrder, generateValidateReviseLoop, isAgentLoopOptions, resolveLoop, resolveToolConcurrency, singleShotLoop } from "./agent-loops.js";
48
+ export { artifactStructuredOutputRequest, assertStructuredOutputRequestSupported, DEFAULT_MAX_STRUCTURED_OUTPUT_NAME_LENGTH, DEFAULT_MAX_STRUCTURED_OUTPUT_SCHEMA_BYTES, modelSupportsStructuredOutput, resolveRunProviderOptions, StructuredOutputError, validateStructuredOutputOptions, withoutStructuredOutput, } from "./structured-output.js";
49
+ export { composeSystemPrompt, mergeSystemPromptConfig } from "./system-prompts.js";
50
+ export { applyThinkingLevel, isThinkingLevel, normalizeThinkingLevel, THINKING_LEVELS, thinkingCompatFor, thinkingFamilyForModel, } from "./thinking.js";
51
+ export { createToolParameterValidator, createToolRegistry, dispatchToolCall, filterTools } from "./tools.js";
52
+ export { resolveUseCaseModel, resolveUseCaseModelBinding, useCaseCredentialProviderId, } from "./use-case-model.js";
53
53
  export const name = "prism";
54
- export const version = "0.0.15";
54
+ export const version = "0.0.16";
55
55
  export const description = "Agent harness for AI providers, agents, sessions, and tools.";
56
56
  //# sourceMappingURL=index.js.map
package/dist/input.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import type { ContentBlock, ContextBlock, ContextProvider, ContextResolutionContext, InputBuilder, InstructionInjector, InputBuildContext, JsonObject, Message, ModelConfig, PromptBuilder, PromptBuildRequest, ProviderRequest, ProviderRequestOptions, ResourceLoader, Skill, ToolDefinition, ToolResult } from "./contracts.js";
1
+ import { type ContextBudget } from "./context-budget.js";
2
+ import type { ContentBlock, ContextBlock, ContextProvider, ContextResolutionContext, InputBuildContext, InputBuilder, InstructionInjector, JsonObject, Message, ModelConfig, PromptBuilder, PromptBuildRequest, ProviderRequest, ProviderRequestOptions, ResourceLoader, Skill, ToolDefinition, ToolResult } from "./contracts.js";
2
3
  import type { MiddlewareRegistry } from "./middleware.js";
3
4
  import type { SecretRedactor } from "./redaction.js";
4
- import { type ContextBudget } from "./context-budget.js";
5
5
  export type AgentInput = string | Message | readonly Message[];
6
6
  export interface PromptInstruction {
7
7
  readonly text: string;
package/dist/input.js CHANGED
@@ -1,9 +1,9 @@
1
- import { redactMessage } from "./redaction.js";
2
1
  import { assertMessagesSupportModelCapabilities } from "./content.js";
2
+ import { applyContextBudget, CONTEXT_BUDGET_REPORT_METADATA_KEY } from "./context-budget.js";
3
+ import { runInstructionInjectors } from "./instruction-injection.js";
4
+ import { redactMessage } from "./redaction.js";
3
5
  import { loadTextResource } from "./resources.js";
4
6
  import { composeSystemPrompt } from "./system-prompts.js";
5
- import { runInstructionInjectors } from "./instruction-injection.js";
6
- import { applyContextBudget, CONTEXT_BUDGET_REPORT_METADATA_KEY, } from "./context-budget.js";
7
7
  export function createDefaultInputBuilder() {
8
8
  return {
9
9
  name: "default-input",
@@ -18,13 +18,13 @@ export async function resolveContextProviders(options) {
18
18
  const blocks = [];
19
19
  for (const provider of options.providers ?? []) {
20
20
  throwIfAborted(options.signal);
21
- blocks.push(...await provider.resolve({
21
+ blocks.push(...(await provider.resolve({
22
22
  sessionId: options.sessionId,
23
23
  runId: options.runId,
24
24
  messages: options.messages,
25
25
  metadata: options.metadata,
26
26
  signal: options.signal,
27
- }));
27
+ })));
28
28
  }
29
29
  // ponytail: injector blocks after host+skill provider blocks (split by origin if per-block ordering matters).
30
30
  if (options.injectedBlocks)
@@ -35,18 +35,13 @@ export function createDefaultPromptBuilder() {
35
35
  return {
36
36
  name: "default-prompt",
37
37
  async build(request) {
38
- return [
39
- ...contextMessages(request.context),
40
- ...skillMessages(request.skills),
41
- ...toolMessages(request.tools),
42
- ...request.messages,
43
- ];
38
+ return [...contextMessages(request.context), ...skillMessages(request.skills), ...toolMessages(request.tools), ...request.messages];
44
39
  },
45
40
  };
46
41
  }
47
42
  export function renderPromptTemplate(template, variables, options = {}) {
48
43
  return template.replace(/\{\{\s*([A-Za-z0-9_]+)\s*\}\}/g, (match, name) => {
49
- if (!Object.prototype.hasOwnProperty.call(variables, name)) {
44
+ if (!Object.hasOwn(variables, name)) {
50
45
  if (options.missing === "preserve")
51
46
  return match;
52
47
  throw new Error(`Missing prompt template variable: ${name}`);
@@ -146,9 +141,7 @@ export async function assembleProviderInput(options) {
146
141
  };
147
142
  const providerMessages = await promptBuilder.build({ ...promptRequest, tools });
148
143
  assertMessagesSupportModelCapabilities(options.model, providerMessages);
149
- const metadata = budgetReport
150
- ? { ...options.metadata, [CONTEXT_BUDGET_REPORT_METADATA_KEY]: budgetReport }
151
- : options.metadata;
144
+ const metadata = budgetReport ? { ...options.metadata, [CONTEXT_BUDGET_REPORT_METADATA_KEY]: budgetReport } : options.metadata;
152
145
  return {
153
146
  model: options.model,
154
147
  messages: providerMessages,
@@ -176,9 +169,23 @@ async function buildDefaultInputMessageGroups(input, context) {
176
169
  function flattenInputGroups(groups, layout) {
177
170
  switch (layout) {
178
171
  case "cache_aware":
179
- return [...groups.instructions, ...groups.attachments, ...groups.summaries, ...groups.history, ...groups.toolResults, ...groups.input];
172
+ return [
173
+ ...groups.instructions,
174
+ ...groups.attachments,
175
+ ...groups.summaries,
176
+ ...groups.history,
177
+ ...groups.toolResults,
178
+ ...groups.input,
179
+ ];
180
180
  case "legacy":
181
- return [...groups.instructions, ...groups.summaries, ...groups.history, ...groups.input, ...groups.attachments, ...groups.toolResults];
181
+ return [
182
+ ...groups.instructions,
183
+ ...groups.summaries,
184
+ ...groups.history,
185
+ ...groups.input,
186
+ ...groups.attachments,
187
+ ...groups.toolResults,
188
+ ];
182
189
  }
183
190
  }
184
191
  export function inputMessages(input) {
@@ -189,7 +196,7 @@ export function inputMessages(input) {
189
196
  return [...input];
190
197
  }
191
198
  function instructionMessages(value, label) {
192
- const items = typeof value === "string" ? [value] : value ?? [];
199
+ const items = typeof value === "string" ? [value] : (value ?? []);
193
200
  return items.map((text) => textMessage("system", `${label}:\n${text}`));
194
201
  }
195
202
  function customInstructionMessages(value) {
@@ -241,13 +248,16 @@ async function resourceMessage(uri, context, attachment) {
241
248
  function toolResultMessages(results) {
242
249
  return (results ?? []).map((result) => ({
243
250
  role: "tool",
244
- content: [{
251
+ content: [
252
+ {
245
253
  type: "tool_result",
246
254
  toolCallId: result.toolCallId,
247
255
  name: result.name,
248
256
  result: result.value,
249
257
  error: result.error,
250
- }, ...(result.content ?? [])],
258
+ },
259
+ ...(result.content ?? []),
260
+ ],
251
261
  metadata: result.metadata,
252
262
  }));
253
263
  }
@@ -265,12 +275,15 @@ function skillMessages(skills) {
265
275
  function toolMessages(tools) {
266
276
  if (!tools?.length)
267
277
  return [];
268
- return [textMessage("system", `Available tools:\n${tools.map((tool) => `- ${tool.name}${tool.description ? `: ${tool.description}` : ""}`).join("\n")}`)];
278
+ return [
279
+ textMessage("system", `Available tools:\n${tools.map((tool) => `- ${tool.name}${tool.description ? `: ${tool.description}` : ""}`).join("\n")}`),
280
+ ];
269
281
  }
270
282
  function blockText(block) {
271
283
  if (typeof block.content === "string")
272
284
  return block.content;
273
- return block.content.map((part) => {
285
+ return block.content
286
+ .map((part) => {
274
287
  if (part.type === "text" || part.type === "thinking")
275
288
  return part.text;
276
289
  if (part.type === "tool_result")
@@ -288,7 +301,8 @@ function blockText(block) {
288
301
  if (part.type === "document")
289
302
  return part.transcript ?? part.name ?? part.url ?? part.resourceUri ?? part.mediaType ?? "[document]";
290
303
  return "[content]";
291
- }).join("\n");
304
+ })
305
+ .join("\n");
292
306
  }
293
307
  function templateValue(value) {
294
308
  if (typeof value === "string")
@@ -302,7 +316,9 @@ function sortJson(value) {
302
316
  return value;
303
317
  if (Array.isArray(value))
304
318
  return value.map(sortJson);
305
- return Object.fromEntries(Object.keys(value).sort().map((key) => [key, sortJson(value[key])]));
319
+ return Object.fromEntries(Object.keys(value)
320
+ .sort()
321
+ .map((key) => [key, sortJson(value[key])]));
306
322
  }
307
323
  function throwIfAborted(signal) {
308
324
  if (signal?.aborted)
@@ -1,5 +1,5 @@
1
- import type { ContributionRegistry } from "./contributions.js";
2
1
  import type { ContextBlock, InstructionContext, InstructionInjector, SystemPromptContribution } from "./contracts.js";
2
+ import type { ContributionRegistry } from "./contributions.js";
3
3
  /** Run each selected injector against `ctx`, returning the matching contributions as
4
4
  * `package`-source `SystemPromptContribution[]` (for `composeSystemPrompt`) and
5
5
  * `ContextBlock[]` (for the context merge). Aborts on `ctx.signal`. Non-matching
@@ -1,13 +1,12 @@
1
+ import { readdir, readFile, stat } from "node:fs/promises";
1
2
  import { join } from "node:path";
2
- import { readFile } from "node:fs/promises";
3
- import { readdir, stat } from "node:fs/promises";
4
- import { parseSkillFile, splitFrontmatter } from "../contribution-parsing.js";
5
3
  import { resolveAgentDefinition } from "../agent-definitions.js";
4
+ import { parseSkillFile, splitFrontmatter } from "../contribution-parsing.js";
6
5
  import { assertPermission, isTrusted } from "../security.js";
7
- import { isPathInsideReal } from "./trust.js";
8
- import { readOptionalFile } from "./contribution-discovery.js";
9
6
  import { createSkillRegistry } from "../skills.js";
10
7
  import { isNodeErrorCode } from "./config.js";
8
+ import { readOptionalFile } from "./contribution-discovery.js";
9
+ import { isPathInsideReal } from "./trust.js";
11
10
  const defaultInclude = {
12
11
  systemPrompt: true,
13
12
  agentPrompt: true,
@@ -288,7 +287,13 @@ function resolveSkillContexts(skills, contextProviders) {
288
287
  function collectMetadata(front) {
289
288
  const metadata = {};
290
289
  for (const [key, value] of front) {
291
- if (key !== "name" && key !== "description" && key !== "model" && key !== "tools" && key !== "skills" && key !== "context" && key !== "instructions") {
290
+ if (key !== "name" &&
291
+ key !== "description" &&
292
+ key !== "model" &&
293
+ key !== "tools" &&
294
+ key !== "skills" &&
295
+ key !== "context" &&
296
+ key !== "instructions") {
292
297
  metadata[key] = value;
293
298
  }
294
299
  }
@@ -305,7 +310,10 @@ function getStringList(front, key) {
305
310
  if (Array.isArray(value))
306
311
  return value.map(String);
307
312
  if (typeof value === "string")
308
- return value.split(",").map((s) => s.trim()).filter(Boolean);
313
+ return value
314
+ .split(",")
315
+ .map((s) => s.trim())
316
+ .filter(Boolean);
309
317
  return undefined;
310
318
  }
311
319
  function bodyAsInstructions(text, path) {
@@ -348,7 +356,7 @@ async function readOptional(read, path) {
348
356
  const NAME_RE = /^[A-Za-z0-9 _-]+$/;
349
357
  function parentDirName(path) {
350
358
  const parts = path.split(/[/\\]+/).filter(Boolean);
351
- return parts.length >= 2 ? parts[parts.length - 2] : parts[parts.length - 1] ?? "";
359
+ return parts.length >= 2 ? parts[parts.length - 2] : (parts[parts.length - 1] ?? "");
352
360
  }
353
361
  /** Parse a `CONTEXT.md` into a static {@link ContextProvider}. The markdown
354
362
  * body becomes the context block content; frontmatter `name` overrides the
@@ -1,6 +1,5 @@
1
1
  import type { ContributionFileKind, DiscoveredContribution } from "../contracts.js";
2
- import type { PermissionPolicy } from "../security.js";
3
- import type { TrustPolicy } from "../security.js";
2
+ import type { PermissionPolicy, TrustPolicy } from "../security.js";
4
3
  export interface DiscoveryOptions {
5
4
  readonly kinds: readonly ContributionFileKind[];
6
5
  /** Workspace root. Scans `<root>/.agents/<kind>s/<name>/`. Gated by `trust`. */
@@ -1,10 +1,10 @@
1
1
  import { readdir, readFile, stat } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { isJsonObject } from "../config.js";
4
- import { assertPermission } from "../security.js";
5
- import { isPathInsideReal } from "./trust.js";
6
4
  import { parseSkillFile } from "../contribution-parsing.js";
5
+ import { assertPermission } from "../security.js";
7
6
  import { isNodeErrorCode } from "./config.js";
7
+ import { isPathInsideReal } from "./trust.js";
8
8
  /**
9
9
  * Discover contributions on disk. Scans the workspace `.agents/` tree only;
10
10
  * no global root. One `readdir` per kind-root; no `import()`. Inert output —
@@ -72,7 +72,7 @@ async function readEntry(dir, fallbackName, kind, origin) {
72
72
  return readManifestEntry(dir, fallbackName, kind, origin);
73
73
  }
74
74
  }
75
- async function readSkillEntry(dir, fallbackName, origin) {
75
+ async function readSkillEntry(dir, _fallbackName, origin) {
76
76
  const path = join(dir, "SKILL.md");
77
77
  if (!(await isPathInsideReal(dir, path)))
78
78
  return undefined;